当前位置:首页 > Java

java泛型如何使用

2026-03-03 10:53:48Java

泛型的基本概念

Java泛型是一种在编译时进行类型检查的机制,允许开发者定义类、接口或方法时使用类型参数。泛型的核心目的是提高代码复用性和类型安全性,避免运行时类型转换错误。

泛型类定义

在类名后添加尖括号<>声明类型参数,例如T。类内部可以使用该类型参数作为字段、方法参数或返回值类型:

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 <E> void printArray(E[] array) {
    for (E element : array) {
        System.out.println(element);
    }
}

调用时编译器会推断类型:

Integer[] intArray = {1, 2, 3};
printArray(intArray); // 自动推断E为Integer

类型通配符

使用?表示未知类型,常用于泛型集合的灵活性处理:

  • List<?>:接受任何类型的List
  • List<? extends Number>:接受Number及其子类(上界通配符)
  • List<? super Integer>:接受Integer及其父类(下界通配符)

示例:

java泛型如何使用

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

泛型接口

接口定义方式与类类似:

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

实现时需指定具体类型:

public class OrderedPair<K, V> implements Pair<K, V> {
    private K key;
    private V value;
    // 实现接口方法...
}

类型擦除

Java泛型在编译后会进行类型擦除,转换为原始类型。例如List<String>编译后变为List,元素类型变为Object。运行时无法获取泛型的具体类型信息。

注意事项

  • 不能使用基本类型作为泛型参数(如List<int>非法,需用List<Integer>
  • 无法直接创建泛型数组(如new List<String>[10]非法)
  • 静态方法或静态变量不能使用类的泛型类型参数

通过合理使用泛型,可以显著提升代码的类型安全性和可读性,同时减少类型转换的冗余代码。

分享给朋友:

相关文章

java如何调用方法

java如何调用方法

调用方法的基本语法 在Java中,调用方法需要明确方法所属的对象(实例方法)或类(静态方法),并传递必要的参数。语法格式如下: 实例方法:对象名.方法名(参数列表); 静态方法:类名…

java如何输入字符串

java如何输入字符串

使用 Scanner 类 在 Java 中,可以通过 java.util.Scanner 类来输入字符串。以下是一个示例代码: import java.util.Scanner; public c…

java如何处理高并发

java如何处理高并发

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

如何学习java语言

如何学习java语言

学习Java语言的系统方法 理解基础概念 Java是一种面向对象的编程语言,掌握基础概念如变量、数据类型、运算符、控制流语句(if-else、循环)是第一步。熟悉类和对象的概念,理解封装、继承和多态三…

react激光如何使用

react激光如何使用

安装React激光库 在项目中安装React激光库,通常通过npm或yarn完成。确保项目已初始化并具备React环境。 npm install react-laser-beam # 或 yar…

react如何使用axios

react如何使用axios

安装 Axios 在 React 项目中安装 Axios,可以通过 npm 或 yarn 进行安装: npm install axios 或 yarn add axios 导入 Axios 在需要…