publicclassContainer<K, V>{
private K key;
private V value;
publicContainer(K k, V v){
key = k;
value = v;
}
public K getKey(){
return key;
}
publicvoid setKey(K key){
this.key = key;
}
public V getValue(){
return value;
}
publicvoid setValue(V value){
this.value = value;
}
}
publicclass A extends Apple<T> //錯誤
publicclass A extends Apple<String>//正確,把Apple<T>中的T看成String處理
publicclass A extends Apple //能夠,但泛型檢查有警告:未檢查或不安全的操做,Apple<T>中的T看成Object處理
interface Info<T>{ // 在接口上定義泛型
public T getVar();// 定義抽象方法,抽象方法的返回值就是泛型類型
}
classInfoImpl<T> implements Info<T>{ // 定義泛型接口的子類
private T var ; // 定義屬性
publicInfoImpl(T var){ // 經過構造方法設置屬性內容
this.setVar(var);
}
publicvoid setVar(T var){
this.var = var ;
}
public T getVar(){
returnthis.var ;
}
};
publicclassGenericsDemo24{
publicstaticvoid main(String arsg[]){
Info<String> i = null; // 聲明接口對象
i =newInfoImpl<String>("李興華");// 經過子類實例化對象
System.out.println("內容:"+ i.getVar());
}
};
interface Info<T>{ // 在接口上定義泛型
public T getVar();// 定義抽象方法,抽象方法的返回值就是泛型類型
}
classInfoImpl implements Info<String>{ // 定義泛型接口的子類
privateString var ; // 定義屬性
publicInfoImpl(String var){ // 經過構造方法設置屬性內容
this.setVar(var);
}
publicvoid setVar(String var){
this.var = var ;
}
publicString getVar(){
returnthis.var ;
}
};
publicclassGenericsDemo25{
publicstaticvoid main(String arsg[]){
Info i = null; // 聲明接口對象
i =newInfoImpl("李興華"); // 經過子類實例化對象
System.out.println("內容:"+ i.getVar());
}
};
classDemo{
public<T> T fun(T t){ // 能夠接收任意類型的數據
return t ; // 直接把參數返回
}
};
publicclassGenericsDemo26{
publicstaticvoid main(String args[]){
Demo d =newDemo(); // 實例化Demo對象
String str = d.fun("李興華");// 傳遞字符串
int i = d.fun(30); // 傳遞數字,自動裝箱
System.out.println(str); // 輸出內容
System.out.println(i); // 輸出內容
}
};
publicclassGenericsDemo30{
publicstaticvoid main(String args[]){
Integer i[]= fun1(1,2,3,4,5,6); // 返回泛型數組
fun2(i);
}
publicstatic<T> T[] fun1(T...arg){ // 接收可變參數
return arg ; // 返回泛型數組
}
publicstatic<T>void fun2(T param[]){ // 輸出
System.out.print("接收泛型數組:");
for(T t:param){
System.out.print(t +"、");
}
}
};
Class c1 =newArrayList<Integer>().getClass();
Class c2 =newArrayList<String>().getClass();
System.out.println(c1 == c2);
/* Output
true
*/
publicclassMain<T>{
public T[] makeArray(){
// error: Type parameter 'T' cannot be instantiated directly
returnnew T[5];
}
}
publicclassMain<T>{
public T[] create(Class<T> type){
return(T[])Array.newInstance(type,10);
}
publicstaticvoid main(String[] args){
Main<String> m =newMain<String>();
String[] strings = m.create(String.class);
}
}
publicvoid inspect(List<Object>list){
for(Object obj :list){
System.out.println(obj);
}
list.add(1);//這個操做在當前方法的上下文是合法的。
}
publicvoid test(){
List<String> strs =newArrayList<String>();
inspect(strs);//編譯錯誤
}