如果有合適的介面,無論是參數、回傳型態、變數及 field,在引用時應宣告為介面。
// Good - uses interface as type
Set<Son> sonSet = new LinkedHashSet<>();
// Bad - uses class as type!
LinkedHashSet<Son> sonSet = new LinkedHashSet<>();
使用介面的引用,優點是如果 sonSet 更改實作的 class,所有引用該變數的地方,並不需要修改。那何時適合用 class 來作引用? 當使用的 class 沒有介面存在時,或是要調用的方法在介面中不存在。一般 value class 像是 String 及 Integer,經常都是 final,而且也不會有多個實作,這時就用 class 來引用即可。另一種是基於 class 的框架 (class-based framework) 下,往往是透過 base class 來引用物件,且大多是抽象類。轉載請註明原文網址 https://cookieandcoketw.blogspot.com/2021/03/effective-java-64-refer-object.html
沒有留言:
張貼留言