Java 泛型
Java 泛型
什么是泛型?
泛型是Java SE 5中引入的一个特性,它是指一个类或方法不仅能够具体地声明一个类型,而且也可以使用外来的类型来代替。
泛型的种类
Java 泛型可以分为以下三种种类:
泛型类
泛型类就是在声明类的时候使用泛型,从而使类中的方法、属性、参数可以接受同一种类型的数据。
public class GenericClass<T>{
public T t;
public <T> void genericMethod(T t){
System.out.println(t.toString());
}
}
泛型接口
泛型接口就是在声明接口的时候使用泛型,从而使接口中的参数、方法可以接受同一种类型的数据。
public interface GenericInterface<T>{
public <T> void genericMethod(T t);
}
泛型方法
泛型方法就是在声明方法的时候使用泛型,从而使方法可以接受同一种类型的数据。
public class GenericMethod {
public <T> void print(T t){
System.out.println(t.toString());
}
}
泛型的优点
使用泛型具有以下几个优点:
类型安全
使用泛型可以避免Java中的类型转换异常,从而保证了程序的安全性。
代码重用
使用泛型可以使方法、类、接口中的代码更加通用化,从而实现了代码的重用。
可读性强
使用泛型可以使代码更加简洁明了,从而提高了代码的可读性。
泛型通配符
Java中还提供了一种泛型通配符,用于表示任意类型的数据。
无限定通配符
无限定通配符用“?”表示,表示可以接受任意类型的数据。
public <T> void print(List<T> list){
for (T t : list) {
System.out.println(t.toString());
}
}
上限通配符
上限通配符用“? extends”表示,表示只能接受指定类型及其子类的数据。
public static double sum(List<? extends Number> list){
double sum = 0.0;
for (Number number : list) {
sum += number.doubleValue();
}
return sum;
}
下限通配符
下限通配符用“? super”表示,表示只能接受指定类型及其父类的数据。
public static <T> void addAll(List<? super T> dest, List<T> src){
dest.addAll(src);
}
泛型的局限性
Java泛型也有一些局限性:
不能使用基本类型
Java泛型中不能使用基本类型,只能使用其对应的包装类。
运行时类型信息丢失
Java泛型中的类型信息只在编译期存在,编译后就被擦除掉了,不能在运行期获取类型信息。
总结
Java泛型是Java编程中重要的特性之一,它提供了更加安全、可读、重用的代码规范,同时也有一些局限性。需要在实际编码中灵活使用泛型,既要注意其优点,也要充分考虑其局限性。