我对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
的源代码)。
答案 0 :(得分:2)
请注意,有两个不同的枚举实现CopyOption
:StandardCopyOption
和LinkOption
。由于两个重叠的语义(LinkOption
适用于链接,但也适用于复制操作期间),具有超级接口允许copy()
的API更清晰,因为它需要CopyOption
的varargs列表,其中可以包含枚举的实例。