当前位置:首页 > Java

java如何实现泛型

2026-03-04 08:30:47Java

泛型的基本概念

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

调用时类型可显式指定或由编译器推断:

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

类型通配符与边界

  • 通配符?:用于接受未知类型,如List<?>
  • 上界通配符<? extends T>:限制类型为T或其子类。
  • 下界通配符<? super T>:限制类型为T或其父类。

示例:

public static void process(List<? extends Number> list) {
    for (Number num : list) {
        System.out.println(num);
    }
}

泛型接口

接口同样可以定义泛型:

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

类型擦除与限制

Java泛型通过类型擦除实现,运行时类型参数会被替换为Object或其上界。因此:

  • 不能实例化泛型类型:new T()是非法的。
  • 不能创建泛型数组:T[] array = new T[10];会报错。
  • 静态成员不能使用泛型类型参数。

实际应用示例

结合集合框架使用泛型:

List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
String first = names.get(0); // 直接获取String类型

通过泛型,Java实现了类型安全的集合操作和灵活的代码设计。

分享给朋友:

相关文章

java如何创建文件

java如何创建文件

使用 File 类创建文件 通过 File 类的 createNewFile() 方法创建文件。此方法返回布尔值,表示文件是否成功创建。 import java.io.File; import ja…

如何安装java

如何安装java

下载Java开发工具包(JDK) 访问Oracle官方网站或OpenJDK下载页面,选择适合操作系统的版本(Windows、macOS或Linux)。推荐下载最新的长期支持(LTS)版本,如Java…

vue如何实现重新实现主题

vue如何实现重新实现主题

Vue 主题切换的实现方法 使用 CSS 变量动态切换主题 定义主题相关的 CSS 变量,通过修改这些变量实现主题切换。在根元素(如 :root)中定义默认主题的变量,在特定类名下定义其他主题的变量。…

vue如何实现原理

vue如何实现原理

Vue 实现原理的核心机制 Vue.js 的核心实现原理基于响应式系统、虚拟 DOM 和组件化设计。以下是关键机制的详细解析: 响应式系统 Vue 通过 Object.defineProperty(…

java如何输入数组

java如何输入数组

输入数组的方法 在Java中,可以通过多种方式输入数组,具体取决于输入源(如控制台、文件等)和数组类型(如基本类型或对象类型)。以下是几种常见的方法: 使用Scanner从控制台输入 对于基本数据类…

java如何连接mysql

java如何连接mysql

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