我对JDK7 nio软件包的设计感到困惑(我经常使用)。以Files.copy为例,它接受CopyOption的实例,该实例是一个空接口,例如由StandardCopyOption实现:

public enum StandardCopyOption implements CopyOption {
    REPLACE_EXISTING
    COPY_ATTRIBUTES,
    ATOMIC_MOVE;
}

public interface CopyOption {
}


这样的设计背后的想法是什么?我的意思是,即使将CopyOption接口传递给Files.copyFiles.copy仍然对StandardCopyOption具有编译时依赖性(请参见Files.copy的源代码)。

最佳答案

注意,有两个实现CopyOption的枚举:StandardCopyOptionLinkOption。由于这两个重叠的语义(LinkOption适用于链接,而且也适用于复制操作),具有超级接口可以使copy()的API更加整洁,因为它采用了CopyOption的可变参数列表,其中可以包含实例任一个枚举。

09-12 10:06