java泛型和擦除

笔记2024-04-242 人已阅来源:网络

Java泛型是Java语言中的一项重要特性,它可以将类型参数化,使得代码更加灵活和可读。Java泛型的实现方式是通过擦除机制,即在编译时将泛型类型转换为原生类型来实现,但是泛型的类型信息在编译之后会被擦除,导致Java泛型在一定程度上存在类型安全问题。

//定义一个泛型类
public class Box<T> {
private T t;
public void set(T t) {
this.t = t;
}
public T get() {
return t;
}
}
//使用泛型类
Box<Integer> integerBox = new Box<>();
integerBox.set(10);
Integer integer = integerBox.get();  //编译后会被转换成 Object -->Integer

上面的代码中,定义了一个泛型类Box,Box类中有一个类型参数T,同时定义了两个方法set和get用于设置和获取属性值。在使用泛型类时,需要指定泛型类型参数,如Box<Integer>表示这是一个Integer类型的Box。

public static void printList(List<? extends Number> list) {
for (Number n : list) {
System.out.print(n + " ");
}
}
public static void main(String[] args) {
List<Integer> ilist = Arrays.asList(1, 2, 3);
printList(ilist);
}

Java泛型类型通配符是一种特殊的类型,它可以被用作方法的参数类型或者返回类型,用于限制方法的输入或者返回,通配符分为上界通配符和下界通配符。在上面的代码中,定义了一个printList方法,它的参数类型为List<? extends Number>,这个通配符表示可以接收任意继承自Number的类型的列表。这个代码中,它接收了一个Integer类型的列表,在执行printList方法时,将会遍历这个列表,并打印出列表中的元素。

总体来说,Java泛型是Java语言中一个非常重要的特性,它可以使编写的代码具有更高的可读性和可靠性,并且通过擦除机制来实现泛型,虽然擦除机制存在一定的类型安全问题,但是在实际应用中,它的优势远远大于缺点。