Java泛型类的定义
泛型类是Java中一种非常实用的编程技巧,它允许我们在编译时为类或方法指定类型参数,从而实现代码的重用和类型安全,泛型类的定义主要包括以下几个部分:
1、使用关键字<T>
表示泛型类型参数;
2、在类名后面加上尖括号<T>
,其中T
表示泛型类型参数;
3、在类中定义泛型类型的成员变量和方法,并在方法签名中使用类型参数。
下面是一个简单的泛型类定义示例:
public class GenericClass<T> { private T data; // 泛型类型的成员变量 public void setData(T data) { // 泛型类型的成员方法 this.data = data; } public T getData() { // 泛型类型的成员方法 return data; } }
Java泛型类的使用
1、创建泛型类的对象
在使用泛型类之前,需要先创建一个泛型类的对象,由于泛型类型参数在运行时才能确定,因此在创建对象时,需要为类型参数提供具体的类型,对于上面定义的GenericClass
类,我们可以这样创建一个对象:
GenericClass<String> stringObj = new GenericClass<>(); stringObj.setData("Hello, World!"); String str = stringObj.getData(); System.out.println(str); // 输出:Hello, World!
2、实现泛型接口和继承泛型父类
泛型不仅可以用于类的定义,还可以用于接口和父类的定义,这样,我们可以在实现泛型接口或继承泛型父类时,使用泛型类型参数。
// 定义一个泛型接口 public interface GenericInterface<T> { void printData(T data); // 泛型类型的成员方法 } // 实现泛型接口 public class GenericInterfaceImpl implements GenericInterface<String> { @Override public void printData(String data) { System.out.println(data); } }
// 定义一个泛型父类 public abstract class GenericParent<T> { protected T data; // 泛型类型的成员变量 public void setData(T data) { // 泛型类型的成员方法 this.data = data; } public T getData() { // 泛型类型的成员方法 return data; } }
3、在方法中使用泛型类型参数
在方法中,我们可以使用类型参数来表示该方法可以接受任意类型的参数,这使得我们可以在同一个类中编写通用的方法,而不需要为每个方法都编写重复的代码。
public class GenericMethodExample { public static <T> void printData(T data) { // 使用泛型类型参数的方法声明和定义 System.out.println(data); } }
4、在通配符上使用泛型类型参数(协变)和不使用通配符上使用泛型类型参数(逆变)的区别:在通配符上使用泛型类型参数时,子类必须实现或扩展父类中的泛型方法;而不使用通配符时,子类可以覆盖父类中的泛型方法,这种区别称为协变和逆变。
// 不使用通配符的协变示例:Animal是一个父类,Dog和Cat是它的子类,它们都需要实现printData方法。 public abstract class Animal<T> { // Animal是一个抽象类,不能直接实例化对象,需要继承它的具体子类才能实例化对象,这里省略了继承的具体代码。.................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/235751.html