设计模式java的目标是什么。尼奥。文件CopyOption接口?
我对JDK7 nio包(我经常使用)的设计感到困惑。以Files.copy
为例,它采用CopyOption
的实例,这是一个空接口,例如由StandardCopyOption
实现:
public enum StandardCopyOption implements CopyOption {
REPLACE_EXISTING
COPY_ATTRIBUTES,
ATOMIC_MOVE;
}
public interface CopyOption {
}
这种设计背后的想法是什么?我的意思是,尽管CopyOption
接口被传递给Files.copy
,但Files.copy
仍然对StandardCopyOption
有编译时依赖性(请参阅Files.copy
的源代码)
# 1 楼答案
注意,有两个不同的枚举实现
CopyOption
:StandardCopyOption
和LinkOption
。由于这两个重叠的语义(LinkOption
适用于链接,但在复制操作期间,也适用于),拥有一个超级接口允许copy()
的API更干净,因为它需要一个CopyOption
的varargs列表,该列表可以包含任一枚举的实例