泛型:
在使用collection收集物件時,由於事先不知道被收集物件的形態,因此內部操作時都是使用 object來參考被收集的物件,取回物件時也是以 object型別返回。由於取回物件時會以 object型別返回,若想針對某類定義的行為操作時,必須告訴編譯程式,讓物件重新扮演該型別。例如
list names = arrays. aslist("justin","monica","irene");
string name =(string) words. get(0)
collection收集物件時,考慮到收集各種物件的需求,因而內部操作採用 object參考收集的物件,所以執行時期被收集的物件會失去形態資訊,也因此取回物件之後,必須自行記得物件的真正型別,並在語法上告訴編譯程讓物件重新扮演為自己的型別。collection雖然可以收集各種物件,但實際上通常 collection中會收集同一種型別的物件。因此從jdk5之後,新增了泛型( generics)語法,讓你在設計api時可以指定類或方法支援泛型,而使用api的客戶端在語法上會更為簡潔,並得到編譯時期檢查。類名旁出現角括號表示支援泛型語法
public
inte***ce comparator
操作泛型介面:
public
class
scimplements
comparator
}
如果不用泛型:
public
class
scimplements
comparator
}
只要宣告引數時有指定型別,建立物件時就不用再寫型別。
方法設計成泛型:
public
static
t some(t t,int i)
.......
string a=some(args,i);//呼叫方法
lambda:
匿名類語法:
request request =new request()
};
宣告 request變數時已經告知是 request型別,而建立 request例項的匿名類語法又寫了一次,實際上 request介面只有乙個方法必須實現,當這種情況發生時,在jdk8中使用 lambda表示式( expression)如下撰寫:
request
request=()->out. println("gggggg");
相對於匿名類語法來說, lambda:表示式的語法省略了介面型別與方法名稱,→左邊是引數列,而右邊是方法本體,編譯程式可以由 request request的宣告中得知語法上被省略的資訊。
如果要返回值:
inte***ce
request
......//lambda語法
request request=(i)->i*2;
泛型+lambda:
inte***ce request
......
//lambda語法
request<
string
> request=(name1,name2)->name1.length()-name2
.length();
泛型 泛型簡介和泛型類
在泛型引入之前,如果我們需要產生多個物件,每個物件的邏輯完全一樣,只是物件內的成員變數的型別不同,那麼我們只能建立多個類檔案,給每個類的成員變數設定不同的資料型別。這麼做會導致類的膨脹,重用性太差。一種方式是對將object作為變數型別,但是需要對獲取的資料進行強制型別轉換,這個過程可能導致型別轉換...
泛型程式設計簡介
1 資料結構課程的特點 專注於資料元素之間的關係 專注於特定結構之上的演算法 資料結構課程並不關注資料元素的具體型別 如何為資料結構的學習選擇合適的語言?唐老師經驗 支援泛型程式設計的語言是最適合資料結構課程的學習。2 泛型程式設計的概念 不考慮具體資料型別的程式設計方式。c 中的函式模板 1 一種...
C 泛型簡介
在前面已經介紹了類和方法的定義,那麼泛型究竟有什麼作用呢?在前面 c 集合 一節中介紹了集合,集合中的項允許是 object 型的值,因此可以存放任意型別的值 例如,在 arraylist 中以 double 型別存入學生考試成績,但存入值時並沒有做驗證,存入了其他資料型別的值,如下。arrayli...