JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Software Design » Effective Java  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 [Effective Java] 條款 17 : interfaces 只應當被用來定義型別 (types)
metavige

metavige

版主

發文: 2134
積分: 10
於 2004-07-16 23:46 user profilesend a private message to usersend email to metavigereply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
一般來說,interfaces 是用來定義 class 的 Signature 的
當某個 class 實作了某個 interface,則該 interface 就變成了一種型別
可以用來指向這個 class 的實體

有一種interface,用來定義constant type
這種 interface 稱之為 constant interface
1
2
3
4
public interface PEOPLE_Constant  {
  static final String MAN = "MALE";
  static final String WOMAN = "FEMALE";
}

而 constant interface 其實是一種不良的 interface 運用
因為 「class 內部使用某些常數只是一種實作細節」
實現 constant interface 會導致實作細節洩漏至 class 的 exported API 中
如果一個 final class 實現了一個 constant interface,其所有的 subclasses 會因為 interface 中的常數而造成命名空間污染(namespaces pollution)

而常數若與既有的 class 或 interface 有緊密的關連,則應該將他們加入到那個 class 或 interface 中
這與 Refactoring 倒有些關連性
例如 Java 標準程式庫中的 Integer.MIX_VALUE 與 Integer.MAX_VALUE,都是類似的作法
而若該常數適合作為列舉型(enumerated type)成員,那你就應該以一個 typesafe enum class(條款21) 來匯出他們
否則應該以一個「不可被實體化」的 utility class(條款3) 加以匯出
1
2
3
4
5
6
public class PEOPLE_Constant  {
  prviate PEOPLE_Constant () {} // 不可被實體化
  
  public static final String MAN = "MALE";
  public static final String WOMAN = "FEMALE";
}


總而言之,interface 應該只用來定義型別(types),而不應該用來匯出(export)常數.....


metavige edited on 2004-07-17 00:19
reply to postreply to post
請各位新手參考 論壇規範Java 新手 FAQ
話題樹型展開
人氣 標題 作者 字數 發文時間
4743 [Effective Java] 條款 17 : interfaces 只應當被用來定義型別 (types) metavige 1154 2004-07-16 23:46
» JWorld@TW »  Software Design » Effective Java

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8