說一下泛型原理,並舉例說明
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
- 核心FAQ 舉例說明 (轉)
- 反NP監視原理並有例項說明
- Mysql 左右連線舉例說明MySql
- java中的單例模式,舉例說明。Java單例模式
- 五款智慧電視機型標準配置對比舉例說明
- 什麼叫執行緒安全,舉例說明。執行緒
- 舉例說明在組合語言中,"[]"的用法組合語言
- 時間複雜度計算和舉例說明時間複雜度
- 舉例說明Oracle資料庫審計的用法Oracle資料庫
- GolgenGate原理說明Go
- Java JDK1.5: 泛型 新特性的講解說明JavaJDK泛型
- 為什麼我們要學習DMAIC?—舉例說明AI
- Dump型別說明型別
- 面試官:說說什麼是泛型的型別擦除?面試泛型型別
- Java核心之細說泛型Java泛型
- MySQL的information_schema資料庫表說明及用法舉例MySqlORM資料庫
- 細說 Java 泛型及其應用Java泛型
- oracle12c新特性列舉說明Oracle
- 卡爾曼濾波的原理說明
- 說一下HashSet的實現原理?
- 以例項說明 OAuth2OAuth
- 用三個例項說明python類多型和過載。Python多型
- adb 埠自定義及原理說明
- SYSAUX 說明UX
- 在Linux中,什麼是系統監控和效能分析工具?舉例說明。Linux
- Redis 複製、Sentinel的搭建和原理說明Redis
- js 快捷鍵大全,並有簡單使用說明JS
- oracle 各資料型別dump說明(三)Oracle資料型別
- oracle 各資料型別dump說明(二)Oracle資料型別
- oracle 各資料型別dump說明(一)Oracle資料型別
- 說說劫持 Cookie 的原理Cookie
- Java 泛型原理Java泛型
- 用Excel做資料說明――抽樣說明工具Excel
- Java 集合列舉泛型(一)Java泛型
- WebApiClientCore使用說明WebAPIclient
- QLExpress使用說明Express
- postman 使用說明Postman