我想动态加载一个java类,然后在ObservableList<myLoadedClass>
中添加用这个类创建的对象。
Class<?> thisClass = Class.forName("Point", true, classLoader);
Object iClass = thisClass.newInstance();
...
ObservableList<thisClass> data = FXCollections.observableArrayList();
最后一行导致错误
找不到符号:class thisClass ...
感谢您的帮助。
答案 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)));