1. 程式人生 > >JAVA進階-泛型

JAVA進階-泛型

span float ati 子類 rec content ace -s ava

>泛型:泛型指代了參數的類型化類型,一般被用在接口。類。方法中
>作用:用來確定參數的範圍,在書寫代碼的時候提前檢查代碼的錯誤性
>泛型的聲明,下面給出類聲明,依此類推:
class ClassName<T>{}
class ClassName<K,V,O>{}



>通用符:<?>一般指定全部的類
>限定符:<T exteds 超類>
1)限定符字母僅僅能被限定一次
2)當extends的時候僅僅能使用大寫字母,當super的時候僅僅能使用"?"
3)在類中不能使用super限定符號。
4)在類中的限定符能被方法繼續使用。
5)接口中聲明時有限定符號,其子類也必須有。


class Book<T extends Number>{

void go(Stack<T> stack){


}


public void go2(Stack<?

super Number> stack2){

}
}


1.參數轉換>
聲明:
class Book<T extends Number>{}
引用:
Book<Number> numBook=new Book<Number>();
Book<Integer> numBook2=new Book<Integer>();
//

同一層級上的參數顯式或者隱式的轉換都是錯誤的
// numBook=(Book<Number>)numBook2;

2.比較和賦值:
聲明:
class CompareClass<T>{
T a;
CompareClass(T t){
this.a=t;
}
}

比較:
CompareClass<Float> f=new CompareClass<Float>();
CompareClass<Integer> i=new CompareClass<Integer>();

f==i?這樣的結果會產生編譯錯誤;
賦值:
f=i;?相同也會產生編譯錯誤。


2.類型參數數組>
聲明:
T[] t;

定義:
T[] t=new int[10];//編譯錯誤
改動:
T[] t;
int[] in=new int[]{10,20};
t=in;



3.類型參數靜態使用>因為類型參數僅僅有在實例化的時候才確定類型,因此
例如以下的代碼。把類型參數作為靜態變量將會引發編譯錯誤;
class Person<K,V>{

static K name;
static V age;
static V getName(){
return age;
}

}



JAVA進階-泛型