小编see*_*r27的帖子

实例化泛型类型 ArrayList<T>

我是泛型的新手,并在文章“参数化类型,例如ArrayList<T>,不可实例化 - 我们无法创建它们的实例”中读到过。

完整引用,来自 Java in a Nutshell:

参数化类型,例如ArrayList<T>,不可实例化 - 我们无法创建它们的实例。这是因为<T>只是一个类型参数 - 只是一个真正类型的占位符。只有当我们为类型参数提供一个具体的值时,(例如, ArrayList<String>),类型才完全成形,我们可以创建该类型的对象。

如果我们要使用的类型在编译时未知,这就会带来问题。幸运的是,Java 类型系统能够适应这个概念。它通过具有表示为 的未知类型的显式概念来实现<?>

我知道它不应该是可实例化的,因为具体(实际)类型未知。如果是这样,为什么下面的代码编译没有错误?

public class SampleTest {

    public static <T> List<T> getList(T... elements) {

        List<T> lst = new ArrayList<>(); // shouldn't this line return an error? 

        return lst;
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道我在这里对泛型的理解存在差距。有人可以指出我在这里缺少什么吗?

java generics

5
推荐指数
1
解决办法
9305
查看次数

标签 统计

generics ×1

java ×1