当前位置:首页 > Java

java泛型如何使用

2026-02-04 23:41:01Java

泛型的基本概念

泛型(Generics)是Java 5引入的特性,允许在类、接口或方法中使用类型参数,从而提供编译时类型检查,避免运行时类型转换错误。泛型的核心目的是增强代码的复用性和类型安全性。

泛型类

泛型类通过在类名后添加类型参数(如<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(); // 无需强制类型转换

泛型方法

泛型方法在方法返回类型前声明类型参数(如<T>),独立于类的泛型参数。

java泛型如何使用

public <T> void printArray(T[] array) {
    for (T item : array) {
        System.out.println(item);
    }
}

调用时可通过上下文推断类型:

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

泛型接口

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

public interface List<T> {
    void add(T item);
    T get(int index);
}

实现时需指定具体类型:

java泛型如何使用

public class StringList implements List<String> {
    @Override
    public void add(String item) { /* ... */ }
    @Override
    public String get(int index) { /* ... */ }
}

类型通配符

通配符(?)用于处理未知类型,通常分为以下三种:

  • 无界通配符 <?>:表示任意类型。
  • 上界通配符 <? extends T>:表示T或其子类。
  • 下界通配符 <? super T>:表示T或其父类。

示例:

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

泛型限制

  • 类型擦除:泛型信息在编译后会被擦除,运行时无法获取类型参数的具体类型。
  • 不能实例化泛型类型:如new T()是非法的。
  • 不能用于静态上下文:类的静态方法或变量不能使用类的泛型参数。

实际应用示例

集合框架(如ArrayListHashMap)广泛使用泛型:

List<String> names = new ArrayList<>();
names.add("Alice");
Map<Integer, String> idToName = new HashMap<>();
idToName.put(1, "Bob");

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

分享给朋友:

相关文章

react moment如何使用

react moment如何使用

安装 react-moment 通过 npm 或 yarn 安装 react-moment: npm install react-moment 或 yarn add react-moment 基本…

如何安装java

如何安装java

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

java如何自学

java如何自学

确定学习目标和路径 自学Java需要明确目标,例如开发Web应用、Android应用或后端服务。根据目标选择学习重点,如Java基础、Spring框架或Android开发。制定阶段性计划,从基础语法到…

java如何输出数组

java如何输出数组

输出数组的方法 在Java中,输出数组内容有多种方式,具体取决于数组类型和输出格式需求。以下是几种常见的方法: 使用Arrays.toString()方法 适用于一维数组,直接调用Arrays.to…

java如何输入数据

java如何输入数据

输入数据的方法 在Java中,输入数据可以通过多种方式实现,具体取决于输入来源(如控制台、文件、网络等)。以下是几种常见的方法: 使用Scanner类从控制台输入 Scanner类是Java中最常用…

java如何解决高并发

java如何解决高并发

Java 高并发解决方案 使用线程池优化资源管理 线程池(如 ThreadPoolExecutor)能避免频繁创建和销毁线程的开销。通过核心线程数、最大线程数和任务队列的合理配置,可以平衡系统负载。例…