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 Reloaded]Generics系列二:比起Type Parameters 先使用Wildcards
koji

秒速5センチメートル

站長

發文: 8420
積分: 19
於 2006-10-17 13:50 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
本文翻譯自JavaOne的Effective Java Reloaded,可以到JavaOne網頁看投影片

當使用type parameters時想一下是不是用wildcards會更好

1
2
3
4
5
6
7
8
9
10
11
// Generic method with type parameter E
public <E> void removeAll(Collection<E> coll) {
    for (E e : list)
        remove(e);
}
 
// Method whose parameter uses wildcard type
public void removeAll(Collection<?> coll) {
    for (Object o : coll)
        remove(o);
}


譬如以上的程式

如果是第二個,就可以比較清楚的知道代表任意type的collection都可以放入
而第一個的E其實在這邊是沒什麼意義的

所以一個Rule就是
當type paramters只出現在method signature中一次的話,那麼就把他替換成wildcards吧

但是其中一個例外就是在使用Conjunctive Types時,如下
1
<E, T extends Serializable & List<E>> void f(T list) {}


先注意這個code跟

1
2
interface SerializableList<E> extends Serializable, List<E>;
void f(SerializableList<?> list) {}


是不同的,使用第二個method必須實作定義的interface, 但是第一個則不用
那使用第一種Conjunctive Types時為了確保傳入的內容為Serializable 的List,那就必須保留T.

koji


koji edited on 2007-03-29 01:50
reply to postreply to post
JCConf Taiwan 2015 開始售票了!!
Facebook上的TWJUG社團,歡迎加入
話題樹型展開
人氣 標題 作者 字數 發文時間
2599 [Effective Java Reloaded]Generics系列二:比起Type Parameters 先使用Wildcards koji 910 2006-10-17 13:50
» 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