原文出自SPRingSide Wiki,請留意wiki中的更新。
隨著光陰推移,Annotation 慢慢在開源框架中推廣,泛型漸漸被程序員們用熟,加上AutoBoxing的小糖,SpringSide終于離不開JDK5.0。
本來int的非Object性就很無聊,在JDK5.0終于提供了autoboxing功能。這個語法簡化糖,被用在了每一個地方。
for each 循環也改善了原本總要愣一下的collection遍歷。不過對于非JDK基本類型,collection必須用泛型聲明,如List<Book>。
泛型大量用于SpringSide Core中的基類,使子類更簡潔,基類更強大。當然,基類是難讀了,所以才需要社區花上這么長的時間來把<T>看到順眼。
泛型使用的有兩個定式:
假如函數輸入參數里含Class類型,而返回值又是該Class的實體,應該將該函數設為泛型函數。最典型的例子是HibernateGenericDao的get() 函數
其中眼花繚亂的第一個<T>聲明這是一個泛型函數,第2個T聲明返回值為T,第三個Class<T>代表 T.class?;悓懙男羷冢宇愑玫盟?nbsp;
Book book = (Book)manager.get(Book.class,1) 簡化成了 Book book = manager.get(Book.class,1);
最典型的例子HibernateEntityDao,子類只需以下定義,即獲得要治理的Entity的Class。
此時子類只要聲明一次T,上面的Book book = (Book)manager(Book.class,1) 就能簡化成Book = manager.get(1);
一舉兩得地既避免了強制類型轉換,又聲明了T.class 供框架使用,無須再在Manager的構造函數或getEntityClass()函數定義entityClass,。
反射的API 詳見GenricsUtils ,精簡的對上面BookManager的定義反射代碼如下:
新聞熱點
疑難解答