close

泛型(Generic):一邊解放類別跟函式的僵固型態,一邊提供編譯驗證機制。看視彈性至極、又兼具嚴格規範的一種機制。對程式設計師而言他的出現使得很多程式可以有更高reuse的機會;對編譯器而言,也更能檢查出原本應該於runtime出現的error。提供彈性、提供可驗證性,一個極具巧思的機制,在這我就依照自己的想法來對此加以論述,有興趣的朋友們不妨聽聽。

 

java泛型,猶如C++ Templatejava中的泛型,其實表徵上跟C++差不了太多。但java的優點是所有物件都繼承於Object故其多型更為自然;而C++就會一不同型態動態的將template一一改編,所以程式碼會越來越大。泛型最主要的用處是『讓具備相同pattern的演算法,只有一些特定型態不同的情況,有更高的抽象化效果。

舉例而言:in C++template

template <typename T>

T min (T x, T y)

{

return (x < y)? x : y

}

 

//Template instantiate 1

int m, x, y;

m = min(x, y);

 

//comipler會將T轉換成int

int min (int x, int y)

{

return (x < y)? x : y

}

 

//Template instantiate 2

double m, x, y;

m = min(x, y);

 

//comipler會將T轉換成int

double min (double x, double y)

{

return (x < y)? x : y

}

see...利用template之後,編譯器會自動依據你宣告型態把T更換掉,故多個邏輯相同的演算法,就可以共用相通的一個樣版囉!

in Java

class GetMin<T> {

void min(T x, T y) {

return (x < y)? x : y

 }

}

 

//create instance帶入整數型態的變數

GetMin<Integer> minObj = new GetMin<Integer>( );

minObj.min(new Integer(10), new Integer(5)); //取得最小直

 

//create instance帶入浮點數型態的變數

GetMin<Double> minObj = new GetMin< Double >( );

minObj.min(new Double(10), new Double(5)); //取得最小值

see...again Java中採用泛型也可令多個邏輯相同的演算法,共用一相同樣版囉!

Java提供的JDK1.5之後開始提供了泛型的機制,隨著泛型的來臨,緊接而來的兩大效益分別是:1.如上一段所述開始將多個邏輯相同的演算法抽象化描述,避免過多的程式碼撰寫,也提供日後更高度的維護性;2.泛型的出現亦可避免許多開發者不經易產生的runtime error舉例而言:以往在Java中許多集合如VectorArrayList都能接收Object的物件,故所有的物件皆可丟入,其做法雖彈性無窮,也正因如此常產生程式設計師無心之過,又編譯時間無法攔截故總得等到執行期間才發現錯誤。下面將針對Java泛型真進一步描述~~

 

泛型:避免集合陷入脫僵野馬的型態錯亂問題而誕生的解決方案。泛型在定義過程的目的是為了再度提高程式利用性;而使用過程中,通常是為了幫更廣泛的集合加以收斂其可使用的型態為何,以避免因型態不合而產生的runtime error。我們可以用下例來觀看:

List<String> list; //此時list此集合只能加入String型別的資料。

list.add(“abc”);

list.add(100); //compile error因為100不是String型別的資料。

 

切記濫用泛型只會釀成日後維護的大禍。為什麼這樣說呢?因為現實世界中越抽象同常越複雜,例如,0~9也才10個數字,但我們的整個數學不就是一直圍繞在這幾個數字之前打轉,不論:離散、線代、幾何、數質計算等無一不是。這在在的表示了越抽象或越趨簡化的形式存在的事務,其呈現的排列組合往往能衍生出來越多複雜的道理所使用。而專案的維護上,複雜會是一個致命的要害,所以泛型是好的發明,但若不能善用,只是一昧的過渡使用,小心您日後的程式碼將很難閱讀,如此維護時間將大幅增加,這是programmer需要自行拿捏的設計準則。

 

避免複雜的泛型擾人,那就只在最根源提供泛型機制(內部核心處理)。對外界而言都直接用,不必自行定義即有泛型之效,使許多原本在runtime才會出現的錯誤,編譯時間就能察覺,以求快速對程式進行修補,避免將問題延遲到執行期間才執行。這也就是我一直在講的未來的IT世界:內部複雜彈性化、外部簡單方便化。 

 

 

arrow
arrow
    全站熱搜

    劉逸 發表在 痞客邦 留言(1) 人氣()