Java 如何将加载的 class 参数类型作为通用参数传递?
Java how to pass a loaded class parameter type as a generic argument?
我想动态加载 java class,然后在 ObservableList<myLoadedClass>
中添加使用此 class 创建的对象。
Class<?> thisClass = Class.forName("Point", true, classLoader);
Object iClass = thisClass.newInstance();
...
ObservableList<thisClass> data = FXCollections.observableArrayList();
最后一行导致错误
Cannot find symbol: class thisClass...
感谢您的帮助。
你在编译时不知道 thisClass
是什么类型 - 这就是通配符的用途:
ObservableList<?> data = FXCollections.observableArrayList();
可以使用通配符,但是...
Class<?> thisClass = Class.forName("Point", true, classLoader);
Object iClass = thisClass.newInstance();
...
ObservableList<?> data = FXCollections.observableArrayList();
data.addAll(iClass);
最后一行原因:没有找到适合 addAll(Object) 的方法。
有什么想法吗?
五(或更多 ;-)分钟后...
而不是通配符, 'Object' 成功了。受 This thread 启发,他们在其中解释:"So a Collection of unknown type is not a collection that can take any type. It only takes the unknown type. And as we don't know that type (its unknown ;) ), we can never add a value, because no type in java is a subclass of the unknown type."
所以,目前我的解决方案是:
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)));
我想动态加载 java class,然后在 ObservableList<myLoadedClass>
中添加使用此 class 创建的对象。
Class<?> thisClass = Class.forName("Point", true, classLoader);
Object iClass = thisClass.newInstance();
...
ObservableList<thisClass> data = FXCollections.observableArrayList();
最后一行导致错误
Cannot find symbol: class thisClass...
感谢您的帮助。
你在编译时不知道 thisClass
是什么类型 - 这就是通配符的用途:
ObservableList<?> data = FXCollections.observableArrayList();
可以使用通配符,但是...
Class<?> thisClass = Class.forName("Point", true, classLoader);
Object iClass = thisClass.newInstance();
...
ObservableList<?> data = FXCollections.observableArrayList();
data.addAll(iClass);
最后一行原因:没有找到适合 addAll(Object) 的方法。
有什么想法吗?
五(或更多 ;-)分钟后...
而不是通配符, 'Object' 成功了。受 This thread 启发,他们在其中解释:"So a Collection of unknown type is not a collection that can take any type. It only takes the unknown type. And as we don't know that type (its unknown ;) ), we can never add a value, because no type in java is a subclass of the unknown type."
所以,目前我的解决方案是:
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)));