Java如何将加载的类参数类型作为泛型参数传递?

时间:2016-01-19 13:35:29

标签: java class generics arguments loaded

我想动态加载一个java类,然后在ObservableList<myLoadedClass>中添加用这个类创建的对象。

Class<?> thisClass = Class.forName("Point", true, classLoader);
Object iClass = thisClass.newInstance();
...
ObservableList<thisClass> data = FXCollections.observableArrayList();

最后一行导致错误

  

找不到符号:class thisClass ...

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

在编译时你不知道thisClass是什么类型 - 这就是通配符的用途:

ObservableList<?> data = FXCollections.observableArrayList();

答案 1 :(得分:0)

确定通配符,但是......

Class<?> thisClass = Class.forName("Point", true, classLoader);
Object iClass = thisClass.newInstance();
...
ObservableList<?> data = FXCollections.observableArrayList();
data.addAll(iClass);

最后一行原因:找不到适合addAll(Object)的方法。

有什么想法吗?

五分钟(或多一点;-)分钟后......

而不是通配符,'对象'成了伎俩。灵感来自This thread他们在那里解释:“所以未知类型的集合不是可以采用任何类型的集合。它只需要未知类型。而且因为我们不知道那种类型(它未知;)) ,我们永远不能添加一个值,因为java中没有类型是未知类型的子类。“

所以,现在,我的解决方案是:

Class<?> thisClass = Class.forName("Point", true, classLoader);
Object iClass = thisClass.newInstance();
...
ObservableList<Object> data = FXCollections.observableArrayList();
data.addAll(iClass);

// Sample Point class method
Method getXMethod = thisClass.getDeclaredMethod("getX");

System.out.println(getXMethod.invoke(data.get(0)));