Java泛型

Java 从 1.5 开始提供了泛型。泛型可以在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。

泛型本质上是提供类型的“类型参数”,也就是参数化类型。我们可以为类、接口或方法指定一个类型参数,通过这个参数限制操作的数据类型,从而保证类型转换的绝对安全。

泛型类型

Java 中的 List、Set、Map 等都支持泛型。定义泛型类型的语法如下:

class 类名称<T extends parentClass>

Java 泛型支持声明一个以上的类型参数,只需要将类型用逗号隔开即可。其中:

  • parentClass 是允许的泛型类的父类或接口,用于限制泛型的可选范围。如果不设置,默认是 Object。
  • T 是泛型的类型参数,可以在当前类中用于指代类型。

对于类型不确定的属性或方法,可以使用类型参数来定义,例如:

private T data;

继承泛型类型或者实现泛型接口时,可以传递类型参数给到被继承的类或被实现的接口。例如:

public class Parent<T> {}
public class Child<K,V> extends Parent<K> {}

泛型方法

泛型同样可以在类中包含参数化的方法,而方法所在的类可以是泛型类,也可以不是泛型类。也就是说,是否拥有泛型方法,与其所在的类是不是泛型没有关系。

泛型方法使得该方法能够独立于类而产生变化。如果使用泛型方法可以取代类泛型化,那么就应该只使用泛型方法。另外,对一个 static 的方法而言,无法访问泛型类的类型参数。因此,如果 static 方法需要使用泛型能力,就必须使其成为泛型方法。

定义泛型方法的语法格式如下:

[访问权限修饰符] [static] [final] <类型参数列表> 返回值类型 方法名([形式参数列表])

通配符

类型通配符使用 ? 表示,可以用于限制类型必须继承某个类或者实现某个接口。语法格式如下:

<? extends parent>
通配符不能像 class 或者 interface 那样使用类型来定义属性或方法,只能用于限制类型。

© 2016 - 2024 chengxuzhixin.com All Rights Reserved.

浙ICP备2021034854号-1    浙公网安备 33011002016107号