在Java中创建动态类型列表

问题描述 投票:0回答:1

我试图创建一个List(实际上是几个)对象,但不事先知道它的类型,并且将要创建的列表的参数传递给Class<?>类型的函数,因此例如,它是工作文件如果我返回tickr1,但是当我尝试创建第二个列表并添加第二个列表的所有元素时,它会发出抱怨:

method java.util.Collection.addAll(java.util.Collection<? extends capture#2 of ?>) is not applicable

是否有类似方法可以创建列表

List<clazz.clazz.getTypeName()> tickr1 ...

最后,我使用List并获得了预期的结果,但是,还有更好的方法吗?

public class Crawler {

    private List<?> metacrawler(String level1, String level2, Class<?> clazz, String resource) throws IOException {
        InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource);
        Reader inr = new InputStreamReader(in);
        String json = CharStreams.toString(inr);
        Object glue = JsonPath.read(json, "$."+level1+"[*]."+level2);
        ObjectMapper om = new ObjectMapper();

        List<?> tickr = om.readValue(glue.toString(),
                                    om.getTypeFactory().constructCollectionType(List.class, clazz));
        List<?> tickr2 = om.readValue(glue.toString(),
                                    om.getTypeFactory().constructCollectionType(List.class, clazz));
        tickr.addAll(tickr2);

        return tickr;
    }

    public List<ObjectType1> getObjectsOfType1() throws IOException {
        return (List<ObjectType1>)metacrawler("firstlevel", "secondlevel", ObjectType1.class, "1.json");
    }
}
java list generics dynamic generic-list
1个回答
0
投票

您可以创建类似这样的内容:

© www.soinside.com 2019 - 2024. All rights reserved.