說一下泛型原理,並舉例說明
1.泛型的基礎概念
泛型實現了引數化型別的概念,使程式碼可以應用於多種型別。
- 簡單泛型
public class Hold<T> {
private T a;
public Hold(T a){
this.a = a;
}
public T getA() {
return a;
}
public void setA(T a) {
this.a = a;
}
}
- 泛型介面
public interface Generator<T> {
T test();
}
- 泛型方法
public class Hold{
public <T> void f(T a){
System.out.println(a.getClass().getName());
}
}
2.泛型的擦除
考點:在泛型程式碼內部,無法獲得任何有關泛型引數型別的資訊。
- 考題1
class c1 = new ArrayList<String>().getClass();
class c2 = new ArrayList<Integer>().getClass();
System.out.println(c1 == c2);
答案:true
- 考題2
class Frob {}
class Fnorkle {}
class Quark<Q> {}
class Particle<POSITION,MOMENTUM> {}
public class LostInformation {
public static void main(String[] args) {
List<Frob> list = new ArrayList<Frob>();
Map<Frob,Fnorkle> map = new HashMap<Frob,Fnorkle>();
Quark<Fnorkle> quark = new Quark<Fnorkle>();
Particle<Long,Double> p = new Particle<Long,Double>();
System.out.println(Arrays.toString(
list.getClass().getTypeParameters()));
System.out.println(Arrays.toString(
map.getClass().getTypeParameters()));
System.out.println(Arrays.toString(
quark.getClass().getTypeParameters()));
System.out.println(Arrays.toString(
p.getClass().getTypeParameters()));
}
}
/* Output:
[E]
[K, V]
[Q]
[POSITION, MOMENTUM]
*///:~
3.泛型的邊界
將某個引數限制為某個型別的子集。為了執行這種限制,Java 泛型重用了extends 關鍵字。
interface HasColor { java.awt.Color getColor(); }
class Colored<T extends HasColor> {
T item;
Colored(T item) { this.item = item; }
T getItem() { return item; }
// The bound allows you to call a method:
java.awt.Color color() { return item.getColor(); }
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4662/viewspace-2824051/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 說說Vue 3.0中Treeshaking特性?舉例說明一下?Vue
- 舉例說明如何使用WebSQL?WebSQL
- 舉例說明clear取值有哪些?
- 反直覺SQL舉例說明SQL
- 舉例說明js如何拖拽排序?JS排序
- 舉例說明js滑鼠事件有哪些?JS事件
- 舉例說明常用的cursor取值有哪些?
- 舉例說明js如何實現繼承?JS繼承
- 舉例說明document.execCommand有哪些用途
- 舉例說明表格中如何再巢狀表格巢狀
- 舉例說明陣列的排序方法有哪些?陣列排序
- 舉例說明你知道的css技巧有哪些?CSS
- 舉例說明object.freeze有哪些用途呢?Object
- 什麼叫執行緒安全,舉例說明。執行緒
- 舉例說明微信端相容問題有哪些?
- 舉例說明你對前端工程化的理解前端
- 舉例說明你對前端自動化的理解前端
- 舉例說明如何實現瀏覽器桌面通知?瀏覽器
- 時間複雜度計算和舉例說明時間複雜度
- 舉例說明常用的BOM屬性和方法有哪些?
- 請舉例說明偽元素 (pseudo-elements) 有哪些用途?
- 舉例說明什麼是IIFEs?它有什麼好處?
- 舉例說明前端的程式碼是如何解耦的?前端解耦
- 舉例說明圖片懶載入的方案有哪些?
- 舉例說明Shadow DOM的應用場景有哪些?
- 舉例說明如何從html元素繼承box-sizing?HTML繼承
- 為什麼我們要學習DMAIC?—舉例說明AI
- Java JDK1.5: 泛型 新特性的講解說明JavaJDK泛型
- 說說你對BEM規範的理解,同時舉例說明常見的CSS規範有哪些?CSS
- 什麼是覆蓋?有什麼作用?請舉例說明。
- 舉例說明你對相鄰兄弟選擇器的理解
- Java核心之細說泛型Java泛型
- 面試官:說說什麼是泛型的型別擦除?面試泛型型別
- 2021-2-22:請你說下 CAP 理論並舉例
- 你知道什麼是二、三級域名嗎?舉例說明下
- 舉例說明陣列和物件的迭代方法分別有哪些?陣列物件
- 舉例說明寫一個button的按鈕的方法有哪些?
- 舉例說明物件導向程式設計有什麼缺點?物件程式設計