我对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
的源代码)。 最佳答案
注意,有两个实现CopyOption
的枚举:StandardCopyOption
和LinkOption
。由于这两个重叠的语义(LinkOption
适用于链接,而且也适用于复制操作),具有超级接口可以使copy()
的API更加整洁,因为它采用了CopyOption
的可变参数列表,其中可以包含实例任一个枚举。