java - 可以用泛型类型实例化 List<T> 吗?

标签 java generics objectinstantiation

我正在辅导的一名学生正在参加一个 Web 开发类(class),该类(class)使用了一本关于 Java 的 Dietel 书籍,其中包含一段涉及泛型的奇怪代码:

class StackComposition <T>
{
    private List<T> stackList;

    public StackComposition()
    {
        stackList = new List<T>("stack")  // ERROR
    }

    // .... more code
}

对我来说,很明显为什么这段代码不起作用,而且我很困惑为什么讲师建议学生使用这段代码作为起点。也许我只是不理解泛型,而且我的 Java 技能也有缺陷,但我不明白如何用泛型类型实例化泛型集合。我看到其目的是通过使用通用列表集合并在运行时确定类型来创建堆栈,但我不知道如何使用上述配置来实现这一点。我的第一 react 是告诉学生使用通用 Stack<T> object 并忘记编写这个自定义 Stack 类,但显然这不是作业的目标。

我尝试使用 java.lang.reflect 作为测试包来解决这个问题,但据我所知,这只适用于非通用容器,例如 Array :

public StackComposition(Class<T> type)
{
    Object obj = Array.newInstance(type, 10);
}

最佳答案

您的代码中有两个问题:

您正在尝试使用 new 实例化接口(interface)非法的关键字。您应该实例化 ArrayList 的对象(或者实现 List 的类)。

其次,你不可以通过String对构造函数的引用。

因此,您应该在代码中使用以下内容:

stackList = new ArrayList<T>();

stackList = new ArrayList<T>(10);如果你想给你的 stackList 一个初始大小(将 10 替换为您希望初始化列表的大小)。

关于java - 可以用泛型类型实例化 List<T> 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15123292/

相关文章:

java - 表达一个通用的 `MethodType` 返回类型为任何对象

Java:使用lambda参数获取实际类型的泛型方法

angularjs - 如何动态实例化服务?

android - 在Android中实例化对象时是否可以绕过构造函数

c# - 为什么这个 reqpro40.applicationclass 实例创建失败?

java - Apk 扩展文件 - 应用程序许可 - 开发者帐户 - NOT_LICENSED 响应

java - 如何在套接字级别拦截 Tomcat 请求?

java - IntelliJ 重构为内联冗余数据类

c# - 如何使用泛型编写真正通用的树

c# - 接口(interface)的通用协方差 - "is"和 "="运算符之间奇怪的行为矛盾