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)));