java generics
1.0.0
泛型是一种创建类型安全类和方法的方法,这些类和方法可以对不同类型的对象进行操作,以在编译时而不是运行时捕获类型错误。
5.2版本引入
公共类 GenericClass{私有最终 T 项; 公共 GenericClass(T item) {this.item = item; } public T getItem() {返回项目; } }
私有静态void printItem(T item) {System.out.println(item.toString()); }
它用于限制或绑定到某些类型或其子类型。
它将允许我们调用有界类或接口的方法。
private staticdouble add(T numOne, T numTwo) {return numOne.doubleValue() + numTwo.doubleValue(); }
它是一个允许编译器自动确定泛型方法或构造函数参数的类型的功能。
Listlist = new ArrayList<>();
它是一个>
符号,用于表示未知类型的参数。
private static void printItemsInList(List> list) {for (Object item : list) {System.out.println(item); } }
它用于指定类型参数必须是某个类或接口的子类型。
它用于访问项目。
private static void printItemsInList(List extends Number> list) {for (Number number : list) {System.out.println(number); } }
它用于指定类型参数必须是某个类或接口的超类型。
它用于修改项目。
列表 数字 = new ArrayList<>();numbers.add(10);numbers.add(10.2);numbers.add(10.4f);System.out.println(numbers);
类型安全
数据类型在编译时而不是运行时更正,这使得代码更加健壮和可靠。
代码可重用性
编写可以处理多种类型数据的类和方法,这有助于减少需要编写的代码量。
表现
通过减少类型转换的需要并避免运行时类型检查的开销来提高性能。
类型擦除
这是一个关键功能,它会在运行时删除泛型代码,这可能会限制泛型在某些情况下的有用性。
对原始类型的有限支持
Java 中的泛型不直接支持原始类型,例如 int 或 double。相反,您必须使用它们相应的包装类,例如 Integer 或 Double。这可能比直接使用原始类型效率低。
复杂
可以增加使用复杂类型层次结构和通配符类型的代码的复杂性。