一、使用泛型的好处
- 可以使用多种数据类型,来执行相同的代码
使用泛型前,如不同类型需要进行方法重载
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方法。其实逻辑都是一样的,只是输入参数类型不一样而已,正好在java中数值类型有个公共的父类: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));
}
- 使用泛型以后,可以指定数据类型,而不需要强制类型转换,以及如果插入错误类型,在编译阶段就可以发现
以下是未使用泛型,List元素默认类型为Object,需要强制类型转换
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);
}
}
}
网友评论