Java中的泛型是一种参数化类型的概念,它允许在定义类、接口、方法时使用类型参数,可以在编译时进行类型检查和类型转换,并且提高了代码的重用性和可读性。泛型是在JDK5之后引入的新特性,它是Java语言面向对象编程的一个重要的进展,已经成为Java程序设计的必备技能。
Java泛型的关键字为“
public class Box<T> {
private T t;
public void set(T t) {
this.t = t;
}
public T get() {
return t;
}
}
在上面的例子中,Box类使用了泛型类型T作为类型参数,并在类中定义了一个成员变量t与get、set方法。使用泛型,Box类可以在编译时检查类型,并将错误从运行时移至编译时。
泛型的优点在于可以使用同一套代码处理多种数据类型的需求,提高了代码的复用性。例如,可以使用泛型处理集合类,如List、Set、Map等,可以创建容器来存储不同类型的对象,也可以使用通配符(?)来表示任意类型。例如,在List中使用泛型:
List<String> list = new ArrayList<String>();
list.add("apple");
list.add("banana");
list.add("orange");
String fruit = list.get(0);
System.out.println(fruit);
在上面的例子中,List集合使用了泛型String,只能存储String类型的数据。使用泛型,可以避免向List添加错误类型的数据。而在获取集合中的数据时,也不需要进行强制类型转换。
Java泛型还支持通配符(wildcards),用于表示任意类型的参数。通配符可以分为上界通配符和下界通配符。其中,上界通配符使用extends关键字,用于限制泛型的类型参数必须是某个类或接口的子类或实现类;而下界通配符使用super关键字,用于限制泛型的类型参数必须是某个类或接口的父类。
下面是一个使用通配符的例子:
public void printList(List<?> list) {
for (Object obj : list) {
System.out.print(obj + " ");
}
}
在上面的例子中,printList方法是一个泛型方法,并使用了通配符“?”,表示可以接受任何类型的List集合作为参数。在方法体内部,使用了增强for循环遍历集合,并打印出集合中的每个元素。
总之,Java泛型是Java语言面向对象编程的一个重要进展,它除了可以提高代码的可读性和重用性,还可以在编译时进行类型检查和类型转换,使得程序更加健壮。掌握Java泛型的使用方法对于Java程序员来说是非常必要的一项技能。