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