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

dtg*_*dtg 0 java generics objectinstantiation

我正在辅导的一个学生正在参加一个Web开发课程,该课程使用了关于Java的Dietel书籍,其中包含了一些涉及泛型的奇怪代码:

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

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

    // .... more code
}
Run Code Online (Sandbox Code Playgroud)

很明显,为什么这段代码不起作用,我很困惑为什么教师建议学生使用这段代码作为起点.也许我只是不理解泛型,我的Java技能不足,但我没有看到如何用泛型类型实例化泛型集合.我看到的目的是通过使用通用List集合并在运行时确定类型来创建Stack,但我不知道如何使用上面的配置.我的第一个倾向是告诉学生使用Generic Stack<T>对象并忘记编写这个自定义Stack类,但显然这不是作业的目标.

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

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

Nis*_*hth 5

您的代码中存在两个问题:

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

其次,不允许您传递String对构造函数的引用.

那么,这是您应该在代码中使用的内容:

stackList = new ArrayList<T>();
Run Code Online (Sandbox Code Playgroud)

或者stackList = new ArrayList<T>(10);如果你想给你一个初始大小stackList(用10你希望列表初始化的大小替换).