我正在辅导的一名学生正在参加一个 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/