一、使用泛型的好處
- 可以使用多種數(shù)據(jù)類型,來執(zhí)行相同的代碼
使用泛型前,如不同類型需要進行方法重載
public class NonGeneric {
public int addInt(int x,int y){
return x+y;
}
public float addFloat(float x,float y){
return x+y;
}
//double
public static void main(String[] args) {
NonGeneric nonGeneric = new NonGeneric();
System.out.println(nonGeneric.addInt(1,2));
System.out.println(nonGeneric.addFloat(1f,2f));
}
}
如果還需要double類型的求和,需要重新在重載一個輸入是double類型的add方法。其實邏輯都是一樣的,只是輸入?yún)?shù)類型不一樣而已,正好在java中數(shù)值類型有個公共的父類:Number
public class NonGeneric {
public int addInt(int x,int y){
return x+y;
}
public float addFloat(float x,float y){
return x+y;
}
//使用泛型方法
public <T extends Number> double add(T t1, T t2) {
double allsum;
allsum = t1.doubleValue() + t2.doubleValue();
return allsum;
}
public static void main(String[] args) {
NonGeneric nonGeneric = new NonGeneric();
System.out.println(nonGeneric.add(1,2));
System.out.println(nonGeneric.add(1f,2f));
System.out.println(nonGeneric.add(1d,2d));
System.out.println(nonGeneric.add(1L,2L));
}
- 使用泛型以后,可以指定數(shù)據(jù)類型,而不需要強制類型轉(zhuǎn)換,以及如果插入錯誤類型,在編譯階段就可以發(fā)現(xiàn)
以下是未使用泛型,List元素默認(rèn)類型為Object,需要強制類型轉(zhuǎn)換
public class NonGeneric4 {
public NonGeneric4() {
}
public static void main(String[] args) {
List list = new ArrayList();
list.add("mark");
list.add("OK");
list.add(100);
for(int i = 0; i < list.size(); ++i) {
String name = (String)list.get(i);
System.out.println("name:" + name);
}
}
}
運行會拋出異常
name:mark
name:OK
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at cn.enjoyedu.generic.needgeneric.NonGeneric4.main(NonGeneric4.java:19)
使用泛型后
public class NonGeneric4 {
public static void main(String[] args) {
// List list = new ArrayList();
List<String> list = new ArrayList();
list.add("mark");
list.add("OK");
// list.add(100);
for (int i = 0; i < list.size(); i++) {
String name = (String) list.get(i); // 1
System.out.println("name:" + name);
}
}
}