当前位置:首页 > Java

java 泛型如何使用

2026-02-05 15:04:14Java

泛型的基本概念

泛型是Java中一种参数化类型的技术,允许在类、接口或方法中使用类型参数,提高代码的复用性和类型安全性。泛型的核心目的是在编译时检查类型错误,避免运行时类型转换异常。

泛型类

泛型类通过在类名后添加类型参数定义,类型参数可以是任意标识符,通常使用大写字母如TEKV等。

public class Box<T> {
    private T content;

    public void setContent(T content) {
        this.content = content;
    }

    public T getContent() {
        return content;
    }
}

使用泛型类时,需指定具体类型:

Box<String> stringBox = new Box<>();
stringBox.setContent("Hello");
String value = stringBox.getContent(); // 无需强制类型转换

泛型方法

泛型方法在方法返回类型前声明类型参数,可以在非泛型类中使用。

public class Util {
    public static <T> void printArray(T[] array) {
        for (T item : array) {
            System.out.println(item);
        }
    }
}

调用泛型方法时,可以显式指定类型或由编译器推断:

Integer[] intArray = {1, 2, 3};
Util.<Integer>printArray(intArray); // 显式指定
Util.printArray(intArray);          // 类型推断

泛型接口

泛型接口与泛型类类似,通过类型参数定义。

public interface Pair<K, V> {
    K getKey();
    V getValue();
}

实现泛型接口时需指定具体类型:

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

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

    @Override
    public K getKey() { return key; }

    @Override
    public V getValue() { return value; }
}

类型通配符

泛型中使用?表示未知类型,通常用于限制泛型的范围。

  • <?>:无限制通配符,表示任何类型。
  • <? extends T>:上界通配符,表示T或其子类。
  • <? super T>:下界通配符,表示T或其父类。
public static void printList(List<?> list) {
    for (Object item : list) {
        System.out.println(item);
    }
}

public static double sumOfList(List<? extends Number> list) {
    double sum = 0.0;
    for (Number num : list) {
        sum += num.doubleValue();
    }
    return sum;
}

泛型限制

  • 不能使用基本类型(如intdouble)作为类型参数,需使用包装类(如IntegerDouble)。
  • 不能直接创建泛型数组,但可以通过反射或通配符实现。
  • 泛型类型在运行时会被擦除(Type Erasure),无法获取具体类型信息。

实际应用示例

结合集合框架使用泛型,确保类型安全:

List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
// names.add(123); // 编译错误

Map<Integer, String> idToName = new HashMap<>();
idToName.put(1, "Alice");
idToName.put(2, "Bob");
String name = idToName.get(1); // 无需强制类型转换

通过合理使用泛型,可以显著提升代码的可读性和健壮性。

java 泛型如何使用

分享给朋友:

相关文章

react moment如何使用

react moment如何使用

安装 react-moment 通过 npm 或 yarn 安装 react-moment 包。确保项目中已安装 moment.js,因为 react-moment 依赖它。 npm install…

java如何创建线程

java如何创建线程

创建线程的方法 在Java中,创建线程主要有两种方式:继承Thread类和实现Runnable接口。以下是具体实现方法: 继承Thread类 通过继承Thread类并重写run()方法可以创建线程。…

如何用java

如何用java

用Java实现基础功能 Java是一种广泛使用的编程语言,适用于开发各种应用程序。以下是几个常见功能的实现方法。 打印"Hello, World!" public class HelloWorld…

如何运行java

如何运行java

运行Java程序的方法 安装Java开发工具包(JDK) 确保系统已安装JDK。可通过命令行输入 java -version 检查是否安装。若未安装,需从Oracle官网或OpenJDK下载并配置环境…

java如何输入

java如何输入

使用Scanner类进行输入 Scanner类是Java中最常用的输入工具,适用于从控制台或文件读取数据。需要导入java.util.Scanner包。 基本语法: Scanner s…

如何打开java

如何打开java

打开 Java 程序的方法 通过命令行运行 Java 程序 确保已安装 Java Development Kit (JDK) 并配置环境变量。使用 javac 编译 .java 文件,生成 .clas…