2016-02-27 127 views
2

我很困惑JDK7 nio包的设计(我经常使用它)。以例如Files.copy为例,其采用CopyOption的实例,其是空的界面,例如,由StandardCopyOption实施:java.nio.file.CopyOption接口的目标是什么?

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

public interface CopyOption { 
} 

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

回答

2

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