java泛型类的定义和使用详细介绍

Java泛型(Generics)允许你定义类、接口和方法时使用类型参数,从而实现更加灵活的代码复用。通过使用泛型,你可以编写一个类或方法,而不需要指定具体的类型,直到创建对象或者调用方法的时候才确定具体类型。这可以增加代码的安全性和可读性,减少类型转换的错误。

泛型类的定义

要定义一个泛型类,你需要在类名后面跟上类型参数列表,这个列表被尖括号<>包围。类型参数通常使用单个大写字母表示,最常用的是E(Element)、T(Type)、K(Key)、V(Value)等。

public class Box<T> {
    // T stands for "Type"
    private T t;

    public void set(T t) {
        this.t = t;
    }

    public T get() {
        return t;
    }
}

在这个例子中,Box<T>是一个泛型类,其中T是类型参数。这意味着Box可以用来创建任何类型的对象,比如Box<Integer>Box<String>等等。

使用泛型类

当你想要使用泛型类时,你需要指定实际的类型参数。这通常是在创建对象实例时完成的。

Box<Integer> integerBox = new Box<>();
integerBox.set(10);
System.out.println("Integer Value: " + integerBox.get());

Box<String> stringBox = new Box<>();
stringBox.set("Hello World");
System.out.println("String Value: " + stringBox.get());

上面的例子展示了如何使用Box类来创建两个不同类型的对象:一个是用于存储整数,另一个是用于存储字符串。

泛型类中的构造函数

泛型类也可以有构造函数,这些构造函数同样可以接受泛型类型的参数:

public class Pair<K, V> {
    private K key;
    private V value;

    public Pair(K key, V value) {
        this.key = key;
        this.value = value;
    }

    // Getters and setters...
}

然后你可以这样使用它:

Pair<String, Integer> pair = new Pair<>("Key", 42);

泛型方法

除了泛型类,你还可以定义泛型方法,即方法本身带有类型参数。泛型方法可以在静态和非静态上下文中使用,并且可以在类之外独立存在。

public class Util {
    // Static generic method
    public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {
        return p1.getKey().equals(p2.getKey()) && p1.getValue().equals(p2.getValue());
    }
}

调用这个方法时,类型参数可以从上下文推断出来,或者显式地提供:

boolean same = Util.<String, Integer>compare(pair1, pair2);

通配符

有时候你可能不想限制泛型参数为特定的类型,而是希望它可以是某个类型的子类型或父类型。这时你可以使用通配符?,以及带有限制的通配符<? extends Type><? super Type>

public void printList(List<?> list) {
    for (Object elem : list) {
        System.out.print(elem + " ");
    }
    System.out.println();
}

public void addNumbers(List<? super Integer> list) {
    for (int i = 1; i <= 10; i++) {
        list.add(i);
    }
}

以上就是关于Java泛型类的定义和使用的概述。泛型是Java语言中非常强大的特性之一,它有助于提高代码的质量和灵活性。

本文来自投稿,不代表瓜5博客立场,如若转载,请注明出处:https://blog.gua5.com/xing/36

喜欢 (1)

发表回复

登录后才能评论

猜你喜欢