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

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

分享给朋友:

相关文章

java如何输出

java如何输出

输出到控制台 使用 System.out.println() 方法输出内容到控制台,适用于调试或简单信息展示。 示例代码: System.out.println("Hello, World!")…

uniapp中如何使用iconfont

uniapp中如何使用iconfont

使用 Iconfont 在 Uniapp 中的步骤 下载 Iconfont 资源 访问 Iconfont 官网,选择需要的图标并添加到项目。下载时选择 Font class 格式,解压后会得到 .tt…

如何编写java程序

如何编写java程序

安装开发环境 下载并安装JDK(Java Development Kit),推荐从Oracle官网或OpenJDK获取最新版本。安装完成后配置环境变量,确保JAVA_HOME和PATH正确设置。 选…

java如何生成随机数

java如何生成随机数

生成随机数的方法 在Java中生成随机数可以通过多种方式实现,以下是几种常见的方法: 使用Math.random()方法 Math.random()方法返回一个double类型的伪随机数,范围在[0…

php 实现 java md5加密

php 实现 java md5加密

PHP 实现 Java MD5 加密 Java 和 PHP 的 MD5 加密结果可能存在差异,主要由于字符编码和输出格式的不同。以下是确保 PHP 与 Java MD5 加密结果一致的方法。 确保字…

如何学java基础

如何学java基础

学习Java基础的方法 理解Java的基本概念 Java是一种面向对象的编程语言,掌握基础概念如类、对象、继承、多态和封装是必要的。熟悉Java的语法结构,包括变量、数据类型、运算符和控制语句。 安…