一篇文章带你搞定JAVA泛型
什么是泛型?
Java 泛型(Generics)是 JDK5.0 引入的新特性。将类型作为参数进行传递即为泛型。泛型可以提高程序的安全性和可读性。
泛型的声明与使用
泛型的声明:使用尖括号 <> 定义一个类型参数,然后应用到类、接口或方法的参数、返回值等变量类型的定义当中。
public class MyClass<T> {
T obj;
public MyClass(T obj) {
this.obj = obj;
}
public T getObject() {
return this.obj;
}
}
泛型的使用:在创建对象、方法调用、类实现接口等使用时,需要确定泛型的具体类型参数。
MyClass<Integer> mc = new MyClass<>(10);
int number = mc.getObject();
通配符
通配符是一种不确定的类型参数,使用 ? 表示。通配符的主要作用是让方法能接受不同的泛型类型参数。
上限通配符
使用 extends 关键字限定泛型类型的上限。如下例,泛型类型为 Number 或 Number 的子类。
public void printNumberList(List<? extends Number> list) {
for (Number n : list) {
System.out.println(n);
}
}
下限通配符
使用 super 关键字限定泛型类型的下限。如下例,泛型类型为 Integer 或 Integer 的父类。
public void addInteger(List<? super Integer> list) {
list.add(12);
list.add(23);
}
泛型类和泛型方法
泛型类和泛型方法可以为一个类或方法定义的类型参数提供更大的灵活性。
public class Box<T> {
private T object;
public void setObject(T object) {
this.object = object;
}
public T getObject() {
return object;
}
public <U extends Number> void inspect(U u) {
System.out.println("T: " + object.getClass().getName());
System.out.println("U: " + u.getClass().getName());
}
}
示例
示例一:使用泛型提高程序安全性和可读性
比较使用泛型和不使用泛型的差异。
List list = new ArrayList();
list.add("hello");
String str = (String)list.get(0); // 需要强制类型转换
List<String> strList = new ArrayList<String>();
strList.add("hello");
String str1 = strList.get(0); // 不需要强制类型转换
示例二:使用 extends 通配符限定泛型类型的上限
public static double sum(List<? extends Number> list) {
double sum = 0.0;
for (Number n : list) {
sum += n.doubleValue();
}
return sum;
}
List<Integer> intList = Arrays.asList(1, 2, 3);
double sum = sum(intList);
总结
Java 泛型是提高程序安全性和可读性的重要工具,需要熟练掌握泛型的声明与使用、通配符、泛型类和泛型方法等相关知识点。使用泛型能够提高代码的可维护性和可扩展性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一篇文章带你搞定JAVA泛型 - Python技术站