泛型中的自限定型別
自限定型別強制泛型當做其自己的邊界引數來使用。
package a;
/**
* Created by msc on 2017/1/15.
*/
class SelfBounded<T extends SelfBounded<T>>{
T element;
SelfBounded<T> set(T arg){
element=arg;
return this;
}
T get(){return element;}
}
class A extends SelfBounded<A>{}
class B extends SelfBounded<A>{}
class C extends SelfBounded<C>{
C setAndGet(C arg){
set(arg);
return get();
}
}
class D{}
//因為類D沒有繼承SelfBounded,所以該類編譯失敗。
//class E extends SelfBounded<D>{}
class SelfBounding {
public static void main(String[] args) {
A a=new A();
a.set(new A());
a=a.set(new A()).get();
a=a.get();
C c=new C();
c=c.setAndGet(new C());
}
}
自限定所做的就是要求在繼承關係中,強制要求將正在定義的類當做引數傳遞給基類。
自限定引數據有何意義呢?它可以保證型別引數必須與正在被定義的類相同,還可以使用另一個繼承了SelfBounded的子類作為引數。但是讓引數與正在被定義的類相同是主要用法。
相關文章
- java泛型的侷限探究Java泛型
- java中泛型之型別萬用字元(?)Java泛型型別字元
- 型別 VS 泛型型別泛型
- TypeScript 泛型型別TypeScript泛型型別
- 泛型類、泛型方法、型別萬用字元的使用泛型型別字元
- 泛型型別(.NET 指南)泛型型別
- C# 泛型中的資料型別判定與轉換C#泛型資料型別
- Java中基於泛型的交叉型別 - {4Comprehension}Java泛型型別
- TypeScript 基本型別和泛型的使用TypeScript型別泛型
- Java™ 教程(泛型原始型別)Java泛型型別
- 型別與泛型標記型別泛型
- Scala 泛型型別和方法泛型型別
- Java泛型與型別擦除Java泛型型別
- Java 泛型中? super T和? extends T的區別Java泛型
- Kotlin中的泛型Kotlin泛型
- Java中的泛型方法Java泛型
- Swift 4 中的泛型Swift泛型
- Swift 中的泛型使用Swift泛型
- C#中將DataTable型別轉化為泛型集合C#型別泛型
- 泛型作為返回型別的寫法泛型型別
- Java泛型型別擦除問題Java泛型型別
- 遊戲關卡中的型別運用:《LOOP》的無限可能遊戲型別OOP
- 【譯】在非泛型類中建立泛型方法泛型
- TypeScript 2.1中的型別運算 & 一個遞迴的Readonly泛型TypeScript型別遞迴泛型
- Java泛型T與?的區別Java泛型
- java泛型中<?>和<T>有什麼區別?Java泛型
- C#中的泛型-1C#泛型
- Java 中泛型的協變Java泛型
- Java 中泛型的全面解析Java泛型
- C# 泛型集合的自定義型別排序C#泛型型別排序
- NET 2.0中泛型泛型
- Java中泛型的詳細解析,深入分析泛型的使用方式Java泛型
- 泛型--泛型萬用字元和泛型的上下限泛型字元
- C# 泛型 引用型別約束 值型別約束C#泛型型別
- 如何使用Java泛型對映不同的值型別Java泛型型別
- Kotlin 泛型中的 in 和 outKotlin泛型
- Java 中的泛型方法及 FunctionJava泛型Function
- Java 泛型中易混淆的地方Java泛型