本文共 2299 字,大约阅读时间需要 7 分钟。
泛型类是Java语言中为解决向下转型安全问题而引入的一种概念。与传统类不同,泛型类在定义时并不指定特定的类型,而是在使用时指定具体类型。这种灵活性使得代码更加可维护和可扩展。
class MyClass{ T value; // T代表任意引用类型,可以是Object及其子类}
泛型方法是泛型类的扩展,方法可以带有类型参数。
publicT test(T t) { return t;}
public class Point{ private T x; private T y; public T getX() { return x; } public void setX(T x) { this.x = x; } public T getY() { return y; } public void setY(T y) { this.y = y; } @Override public String toString() { return "Point [x=" + x + ", y=" + y + "]"; }}public class Test { public static void main(String[] args) { Point point = new Point<>(); point.setX("qwe"); point.setY("asd"); System.out.println(point); Point point2 = new Point<>(); // JDK 1.7以后可以省略类型 point2.setX(12); point2.setY(23); System.out.println(point2); }}
通配符用于接收任意类型的泛型,并可以设置泛型的上下界。
?
用于方法参数,表示只能接受特定类型或任意类型的对象,但无法对其进行修改extend
用于设置泛型上界,表示只能接收该界限及其子类super
用于设置泛型下界,表示只能接收该界限及其父类public class MyClass{ private T value; public MyClass(T value) { super(); this.value = value; } public T getValue() { return value; } public void setValue(T value) { this.value = value; }}public class Test1 { public static void main(String[] args) { fun(new MyClass (10)); fun(new MyClass ("qwe")); MyClass myClass = new MyClass<>("123"); MyClass
泛型接口与普通接口不同,支持在接口中定义类型参数。
interface MyClass{ ... }
class MyClassImpl implements MyClass{ // 与普通类一样定义方法}
泛型是在编译阶段转换为具体类,由JVM处理。因此,泛型在运行时会被擦除。
class MyClass{ T value;}MyClass my = new MyClass<>();
在JVM中,同时存在MyClass和Object类的实例,但参数信息已被擦除。
转载地址:http://ydlkk.baihongyu.com/