当前位置:首页 > 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(); // 无需强制类型转换

泛型方法

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

java 泛型如何使用

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);          // 类型推断

泛型接口

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

java 泛型如何使用

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); // 无需强制类型转换

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

分享给朋友:

相关文章

react路由如何使用

react路由如何使用

React 路由的基本使用 React 路由通常通过 react-router-dom 库实现,用于管理单页面应用(SPA)中的页面导航。 安装 react-router-dom: npm ins…

java如何删除文件

java如何删除文件

删除文件的基本方法 使用 java.io.File 类的 delete() 方法可以删除文件。如果文件存在且删除成功,返回 true;否则返回 false。 import java.io.Fil…

java如何连接数据库

java如何连接数据库

Java连接数据库的方法 Java连接数据库通常使用JDBC(Java Database Connectivity)技术,以下是具体步骤和示例代码。 加载数据库驱动 在连接数据库之前,需要加载对应的…

java如何连接mysql

java如何连接mysql

连接 MySQL 数据库的基本步骤 添加 MySQL 驱动依赖 在项目中引入 MySQL 的 JDBC 驱动。如果使用 Maven,在 pom.xml 中添加以下依赖: <dependency…

java如何处理高并发

java如何处理高并发

Java处理高并发的方法 使用多线程和线程池 Java的java.util.concurrent包提供了线程池(如ThreadPoolExecutor)和并发工具类(如CountDownLatch、C…

react如何使用redux

react如何使用redux

使用 Redux 在 React 中的应用 Redux 是一个状态管理库,通常与 React 结合使用以管理全局状态。以下是具体实现步骤: 安装依赖 确保项目中已安装 redux 和 react-r…