本文共 2964 字,大约阅读时间需要 9 分钟。
泛型(Generic)是Java的一项强大的功能,它允许在定义类、接口或方法时,引入类型参数。通过这种方式,代码可以在不实际创建新类型的情况下,灵活地控制类型的具体限制,从而实现更灵活的类型管理。
泛型的核心思想是“参数化类型”。与方法中的参数类似,类型参数可以在定义和使用时分别指定。例如,在定义一个泛型方法时,可以定义方法的参数为某种类型(类型参数),而在调用时,可以传入具体的实现类。
泛型类是最常见的泛型应用形式。通过在类定义中引入类型参数,类的属性和方法可以接受不同类型的数据。
package com.lwh;public class User{ private T var; private F var1; public void setVar(T var) { this.var = var; } public void setVar1(F var1) { this.var1 = var1; } void show() { System.out.println(var); System.out.println(var1); } public static void main(String[] args) { User user = new User<>(); user.setVar(2); user.setVar1("lwh"); user.show(); }}
在这个例子中,User类定义了两个类型参数 T 和 F。类的实例可以根据具体需求选择传递的类型,从而实现灵活的类型管理。
在引用传递时,泛型类的类型必须匹配。如果需要在不确定类型的情况下引用,可以使用通配符?。
package com.lwh;public class People{ private T var; private T var1; public People(T var, T var1) { this.var = var; this.var1 = var1; } void show() { System.out.println(var); System.out.println(var1); } public static People showPeople(People people) { return people; }}class PeopleDemo { public static void main(String[] args) { People p = new People<>("lqh", 12); People people = People.showPeople(p); people.show(); }}
在这个例子中,通配符?允许在引用传递时灵活处理类型。
在引用传递中,泛型操作可以设置类型范围上限和下限。上限使用extends关键字,表示类型参数可以是指定类型或其子类;下限使用super关键字,表示类型参数可以是指定类型或其父类。
public class MyClass{ // 类成员}MyClass obj = new MyClass<>();
从JDK 1.5开始,泛型也可以定义在接口上。接口的泛型定义与类的泛型定义非常相似。
package com.lwh;public interface Food{ public final int AGE = 12; T method(T t); default F method1(F f) { System.out.println("我是默认方法1"); return f; } default G methods2(G g) { System.out.println("我是默认方法2"); return g; } static void methods3() { System.out.println("我是静态方法"); }}public class Meat implements Food { @Override public T method(T t) { System.out.println("niubi"); return t; } public static void main(String[] args) { Food food = new Meat(); System.out.println(Food.AGE); System.out.println(food.method("lwh")); System.out.println(food.method1(23)); food.methods2(23.3); Food.methods3(); }}
泛型方法可以在类中定义,不一定要求类本身是泛型类。
public class Util{ public T method(T t) { System.out.println("niubi"); return t; }}public class TestUtil { public static void main(String[] args) { Util util = new Util<>(); System.out.println("hello " + util.method("world")); }}
泛型是一种强大的技术,它允许在不实际创建新类型的情况下,灵活地管理类型。通过定义类、接口和方法的类型参数,可以实现更灵活的类型管理和代码复用。在实际开发中,合理使用泛型可以显著提高代码的可维护性和可扩展性。
转载地址:http://rbhfk.baihongyu.com/