2016-02-27 129 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的可變參數列表,其中可以包含任一枚舉的實例。