当前位置:首页 > 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");

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

分享给朋友:

相关文章

java程序如何运行

java程序如何运行

编写Java代码 使用文本编辑器或IDE(如IntelliJ IDEA、Eclipse)编写Java源代码,保存为.java文件。例如: public class HelloWorld {…

java如何读取文件

java如何读取文件

读取文件的常用方法 Java提供了多种读取文件的方式,适用于不同场景和需求。以下是几种常见的方法: 使用FileInputStream和BufferedInputStream读取二进制文件 try…

如何编写java

如何编写java

编写Java程序的基本步骤 安装Java开发工具包(JDK),确保系统环境变量配置正确。可以从Oracle官网下载最新版本的JDK并进行安装。 选择一个合适的集成开发环境(IDE),如Eclipse…

react refs 如何使用

react refs 如何使用

React Refs 的基本概念 Refs 是 React 提供的一种访问 DOM 节点或 React 组件实例的方式。通常在 React 的数据流中,父子组件通过 props 进行通信,但在某些情况…

java如何避免死锁

java如何避免死锁

避免死锁的方法 固定顺序获取锁 确保所有线程按照相同的顺序获取多个锁。例如,若需要获取锁A和锁B,所有线程必须先获取A再获取B,避免交叉依赖导致的死锁。这种方式破坏了“循环等待”条件。 使用锁超时机…

java如何调用另一个类的方法

java如何调用另一个类的方法

调用另一个类的方法 在Java中调用另一个类的方法,通常需要创建该类的对象或直接通过类名调用(静态方法)。以下是几种常见的方式: 通过对象实例调用实例方法 创建一个目标类的对象,通过对象调用其方法。…