You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

泛型类技术疑问:能否用任意类型T创建对象?泛型类仅指ArrayList吗?

关于泛型类的两个常见疑问解答

嘿,刚好最近也在跟同事聊泛型的基础问题,你的这两个疑问其实是入门泛型时很典型的点,我来给你掰扯清楚:

问题1:能否使用任意类型T创建泛型类的对象?

答案是大部分引用类型都可以,但有个关键例外——基本数据类型不行。

Java的泛型在编译后会做类型擦除,底层其实是用Object来存储数据的,而基本数据类型(比如int、char、double这些)不是对象,没法直接作为泛型参数。这时候得用对应的包装类:

  • 错误示例:ArrayList<int> numList = new ArrayList<>();(编译器会报错)
  • 正确示例:ArrayList<Integer> numList = new ArrayList<>();

除此之外,任何引用类型都可以作为泛型参数,包括:

  • Java自带的引用类型(String、Date等)
  • 你自己定义的类(比如自定义的User、Order类)
  • 甚至其他泛型类型(比如ArrayList<ArrayList<String>>这种嵌套泛型)

问题2:泛型类特指ArrayList,还是可以是任意类型?

当然不是特指ArrayList!ArrayList只是Java标准库中最常用的泛型类实例而已,泛型类是一个通用的概念,你完全可以自己定义泛型类。

举个简单的自定义泛型类例子,比如一个通用的容器类:

public class GenericBox<T> {
    private T item;

    // 存入元素
    public void putItem(T item) {
        this.item = item;
    }

    // 取出元素
    public T getItem() {
        return this.item;
    }
}

你可以用任意引用类型来实例化这个类:

  • GenericBox<String> stringBox = new GenericBox<>();(存字符串)
  • GenericBox<Double> doubleBox = new GenericBox<>();(存浮点数)
  • GenericBox<YourCustomClass> customBox = new GenericBox<>();(存自定义类对象)

标准库里还有很多其他泛型类,比如HashMap<K,V>、LinkedList<E>、HashSet<E>等等,本质上都是遵循泛型规则的类。

内容的提问来源于stack exchange,提问作者D-effery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:53:37