我正在辅导的一个学生正在学习一个使用 Dietel 关于 Java 的书的 Web 开发课程,其中包含一些涉及泛型的奇怪代码:
class StackComposition <T>
{
private List<T> stackList;
public StackComposition()
{
stackList = new List<T>("stack") // ERROR
}
// .... more code
}
我很清楚为什么这段代码不起作用,我对为什么教师建议学生使用这段代码作为起点感到困惑。也许我只是不了解泛型并且我的 Java 技能不足,但我不明白如何用泛型类型实例化泛型集合。我看到意图是通过使用通用列表集合并在运行时确定类型来创建堆栈,但我看不出使用上述配置如何实现这一点。我的第一个倾向是告诉学生使用 GenericStack<T>
对象而忘记编写这个自定义 Stack 类,但显然这不是作业的目标。
我尝试使用该java.lang.reflect
软件包进行测试来解决此问题,但据我所知,这仅适用于非通用容器,例如Array
:
public StackComposition(Class<T> type)
{
Object obj = Array.newInstance(type, 10);
}