Java, как передать загруженный тип параметра класса в качестве общего аргумента?

Я хотел бы загрузить класс Java динамически, а затем добавить объекты, созданные с этим классом в ObservableList<myLoadedClass> например.

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

Последняя строка вызывает ошибку

Не удается найти символ: класс thisClass...

Спасибо за помощь.

2 ответа

Решение

Хорошо, что подстановочный знак, но потом...

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

Причина последней строки: не найден подходящий метод для addAll(Object).

Есть идеи?


Пять (или немного больше;-) минут спустя...

Вместо подстановочного знака "Объект" сделал свое дело. Вдохновленный этим потоком, где они объясняют: "Таким образом, коллекция неизвестного типа не является коллекцией, которая может принимать любой тип. Она принимает только неизвестный тип. И так как мы не знаем этот тип (его неизвестный;)), мы можем никогда не добавляйте значение, потому что никакой тип в 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)));

Вы не знаете, что это за тип thisClass во время компиляции - это то, что подстановочные знаки для:

ObservableList<?> data = FXCollections.observableArrayList();
Другие вопросы по тегам