Java 泛型是 JDK1.5 中引入的一個新特性,其本質(zhì)是參數(shù)化類型,把類型作為參數(shù)傳遞。其主要的形式有泛型類,泛型接口和泛型方法。泛型概念的提出,不僅提高了代碼的復(fù)用性,而且可以有效防止類型轉(zhuǎn)換異常,提高了代碼的安全性。
泛型的語法格式:
//T稱為類型占位符,表示一種引用類型。
下面我們從泛型的三種形式來學(xué)習(xí) Java泛型是如何提高代碼復(fù)用性和安全性的。
2. 泛型類泛型類的語法是在類名后面加上
,泛型在類中可以創(chuàng)建變量,也可以作為方法的參數(shù)或者返回值。
在使用泛型的使用只能使用引用類型,并且不同的泛型類型對象之間不能相互賦值。
示例,泛型類:
public class MyGeneric{//創(chuàng)建泛型變量,不可以使用 new 來創(chuàng)建,因為 T 是不確定的類型
T t;
//泛型作為方法的參數(shù)
public void show(T t){System.out.println(t);
}
//泛型作為方法的返回值
public T getT(){return t;
}
}
測試:
public class TestGeneric {public static void main(String[] args) {MyGenericmyGeneric=new MyGeneric();
myGeneric.t="HelloWorld!";
myGeneric.show("HelloWorld");
System.out.println(myGeneric.getT());
}
}
3. 泛型接口泛型接口的語法是在接口名后面加上
,泛型接口中不可以創(chuàng)建 static 修飾的變量。泛型接口有兩使用方式,要么在實現(xiàn)接口時確定泛型類的類型,要么在實現(xiàn)接口時先不確定泛型類類型,而在實例化對象時再確定。
方法一示例:
public interface MyInterface{ String name="張三";
T show(T t);
}
泛型類的實現(xiàn):
public class MyInterfaceImpl implements MyInterface{@Override
public String show(String s) {System.out.println(s);
return s;
}
}
測試:
public class TestGeneric {public static void main(String[] args) {MyInterfaceImpl myInterfaceImpl=new MyInterfaceImpl();
myInterfaceImpl.show("HelloWorld");
}
}
方法二示例,實現(xiàn)泛型接口:
public class MyInterfaceImpl2implements MyInterface{@Override
public T show(T t) {System.out.println(t);
return t;
}
}
測試:
public class TestGeneric {public static void main(String[] args) {MyInterfaceImpl2myInterfaceImpl=new MyInterfaceImpl2();
myInterfaceImpl.show("HelloWorld");
}
}
4. 泛型方法泛型方法的語法是在方法返回值的前面加上
。
示例:
public class MyGenericMethod {publicT show(T t){System.out.println("泛型方法"+t);
return t;
}
}
測試:
public class TestGeneric {public static void main(String[] args) {MyGenericMethod myGenericMethod=new MyGenericMethod();
myGenericMethod.show("HelloWorld!");
myGenericMethod.show(200);
}
}
5. 泛型集合泛型集合是參數(shù)化類型,類型安全的集合。泛型集合強(qiáng)制集合元素的類型必須一致。
使用泛型集合在編譯器即可檢查,而非運(yùn)行期拋出異常,并且不同的泛型類型之間不可以相互賦值。
import java.util.ArrayList;
public class Test {public static void main(String[] args) {ArrayListarrayList=new ArrayList();
arrayList.add("張三");
arrayList.add("李四");
for (String s:arrayList) {System.out.println(s);
}
ArrayListarrayList1=new ArrayList();
Student s1=new Student("張三",18);
arrayList1.add(s1);
for (Student student:arrayList1) {System.out.println(student);
}
}
}
我們查看 ArrayList 在JDK中的源碼:
public class ArrayListextends AbstractListimplements List, RandomAccess, Cloneable, java.io.Serializable
它是一個泛型類,而我之前使用的時候并沒有傳遞,說明 Java 語法是允許的,這個時候傳遞的類型是 Object 類,雖然它是所有類的父類,可以存儲任意的類型,但是在遍歷、獲取元素時需要原來的類型就要進(jìn)行強(qiáng)制轉(zhuǎn)換。
這個時候就會出現(xiàn)一些問題,假如往鏈表里存儲了許多不同類型的數(shù)據(jù),在強(qiáng)轉(zhuǎn)的時候就要判斷每一個原來的類型,這樣就很容易出現(xiàn)錯誤。
Java編程基礎(chǔ)教程系列【Java基礎(chǔ)】Java常用類詳解(包裝類,字符串,枚舉,文件…)
【Java集合】Collection 體系集合詳解
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧