Мне нужно проанализировать XML-файл и создать кучу объектов с ArrayList
с отражением.Как обойти метод Class.forName()
Я достиг этого с Class.forName()
.
Вот мой код:
public ArrayList<Sweets> parse(String fileName) throws Exception {
File file = new File(fileName);
Document doc = builder.parse(file);
ArrayList<Sweets> items = new ArrayList<Sweets>();
int itemCount = Integer.parseInt(path
.evaluate("count(/gift/item)", doc));
for (int i = 1; i <= itemCount; i++) {
double sugar = Double.parseDouble(path.evaluate("/gift/item[" + i + "]/@sugar", doc));
String name = path.evaluate("/gift/item[" + i + "]/name", doc);
double weight = Double.parseDouble(path.evaluate("/gift/item[" + i
+ "]/weight", doc));
Class cl = Class.forName("com.epam.lab.model.chocolate." + name);
items.add((Sweets) cl.getConstructor(double.class, double.class)
.newInstance(sugar, weight));
}
return items;
}
Он работает, но на этой линии:
Class cl = Class.forName("com.epam.lab.model.chocolate." + name);
Но некоторые недостатком является то, что этот метод должен иметь полное имя класса включают в себя пакеты.
Требуется только от отдельной упаковки. Но мне нужно брать другие классы из другого места. Ограничение forName()
не позволяет мне это делать.
Как обходить Class.forName()
ограничений?
"rescission"? Вы имели в виду ... «отражение»? –
Вы можете попробовать несколько пакетов, или вы можете использовать https://code.google.com/p/reflections/, который индексирует и ищет классы для вас. –