[英]Create a list of dynamic type in Java
我正在嘗試創建一個列表(好吧,實際上是幾個) object 而不事先知道它的類型,並將我想創建這些列表的函數傳遞給Class<?>
類型的參數,因此例如它是工作文件,如果我返回ticker1,但是當我嘗試創建第二個列表並添加第二個列表的所有元素時,它抱怨:
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");
}
}
您可以創建如下內容:
public static void main(String[] args) {
List<String> list = (List<String>) metacrawler(String.class);
System.out.println(list);
}
private static <T> List<?> metacrawler(T clazz) {
List<T> list = new ArrayList<>();
list.add((T) Arrays.asList("test1", "generic"));
list.add((T) Arrays.asList("test2", "generic"));
return list;
}
, output
[[test1, generic], [test2, generic]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.