当前位置:首页 > Java

java中如何使用泛型

2026-03-17 19:05:36Java

泛型的基本概念

泛型是Java中一种参数化类型的机制,允许在类、接口或方法中使用类型参数。泛型的主要目的是提高代码的重用性和类型安全性。

泛型类

定义一个泛型类时,需要在类名后面添加类型参数。类型参数可以是任何有效的标识符,通常使用大写字母如T、E、K、V等。

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

调用泛型方法时,可以显式指定类型参数或让编译器自动推断:

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

类型通配符

类型通配符用于表示未知类型,通常用?表示。通配符可以用于参数、字段或局部变量的类型。

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

有界类型参数

可以通过extends关键字限制类型参数的上界,或通过super关键字限制下界。

public <T extends Number> double sum(List<T> numbers) {
    double total = 0.0;
    for (T num : numbers) {
        total += num.doubleValue();
    }
    return total;
}

泛型接口

接口也可以使用泛型,定义方式与泛型类类似。

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;
    }

    public K getKey() { return key; }
    public V getValue() { return value; }
}

类型擦除

Java的泛型是通过类型擦除实现的,编译器在编译时会移除所有类型参数信息。运行时无法获取泛型类型的具体信息。

List<String> stringList = new ArrayList<>();
List<Integer> intList = new ArrayList<>();
System.out.println(stringList.getClass() == intList.getClass()); // 输出true

泛型数组

由于类型擦除,Java不允许直接创建泛型数组。可以使用通配符类型或强制类型转换作为替代方案。

// 错误的写法
// List<String>[] arrayOfLists = new List<String>[10];

// 正确的替代方案
List<?>[] arrayOfLists = new List<?>[10];
arrayOfLists[0] = new ArrayList<String>();

泛型与继承

泛型类可以继承或扩展其他泛型类。子类可以保留父类的类型参数或指定具体类型。

java中如何使用泛型

public class ChildBox<T> extends Box<T> {
    // 子类保留父类的类型参数
}

public class StringBox extends Box<String> {
    // 子类指定具体类型参数
}

分享给朋友:

相关文章

如何删除java

如何删除java

卸载 Java 的步骤 Windows 系统: 打开控制面板,选择“程序和功能”或“卸载程序”,在列表中找到 Java 相关条目(如“Java Runtime Environment”或“Java D…

java如何学习

java如何学习

学习Java的有效方法 理解基础概念 Java是一门面向对象的编程语言,掌握基础概念如变量、数据类型、运算符、控制语句(if-else、循环)是必要的。面向对象的核心概念包括类、对象、继承、多态和封装…

如何安装java环境

如何安装java环境

下载JDK安装包 访问Oracle官方网站或OpenJDK项目页面,选择适合操作系统的JDK版本(如Windows、macOS或Linux)。确保下载与系统架构匹配的版本(32位或64位)。 运行安…

java如何创建包

java如何创建包

创建Java包的步骤 在Java中,包(package)用于组织和管理类文件,避免命名冲突。以下是创建Java包的详细方法: 定义包名 在Java源文件的开头使用package关键字声明包名。包名…

react如何使用函数

react如何使用函数

使用函数组件的基本语法 在React中,函数组件是通过JavaScript函数定义的组件。函数接收props作为参数,并返回React元素。 function Welcome(props) {…

java如何编写接口

java如何编写接口

编写Java接口的基本语法 在Java中,接口通过interface关键字定义,可以包含抽象方法、默认方法、静态方法和常量。 public interface MyInterface {…