多态数据结构Java

Mat*_*ril 0 java generics reflection polymorphism data-structures

我试图使用动态给出的泛型类型作为给定数据结构的类型,类似于函数中的映射,但在声明时只使用一个类.它更像是带键的ArrayList.所以,我试图做的是:

private final ArrayList<T extends Object> findGroup(final String key, final String classType)
{
     Class<?> c = Class.forName(classType);
     ArrayList<c.class> listOfStuff = new ArrayList<>();

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

我得到的错误发生在.class调用上.我已经尝试过c.getClass(),以及从c.class创建另一个Class对象只是为了查看它是否有效,但无法使其正常工作.

有一些首选的方法吗?

是的,我知道其中一些往往有点繁重,但我需要它来做我正在做的事情.

isn*_*bad 6

如果类对象本身在编译时已知,则可以按如下方式完成:

private final <T> List<T> findGroup(final String key, final Class<T> type)
{
    ArrayList<T> listOfStuff = new ArrayList<T>();

    // TODO: fill listOfStuff here (e.g. using key and type)

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

如果必须在运行时基于String加载类,那么在这里使用泛型是没有意义的,因为调用的方法findGroup本身并不知道List编译时的实际类型.所以你只能将结果分配findGroup给a List<?>.那么为什么要使用泛型呢?

(请注意,在java中,泛型主要用于确保编译时的类型安全性.在运行时,a List<String>和a 之间没有区别,List<Integer>因为在编译代码时类型信息会被删除).