java.nio.file.CopyOption接口的目标是什么?

时间:2016-02-27 07:11:46

标签: java design-patterns nio

我对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的源代码)。

1 个答案:

答案 0 :(得分:2)

请注意,有两个不同的枚举实现CopyOptionStandardCopyOptionLinkOption。由于两个重叠的语义(LinkOption适用于链接,但也适用于复制操作期间),具有超级接口允许copy()的API更清晰,因为它需要CopyOption的varargs列表,其中可以包含枚举的实例。