我需要解析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/为您编制索引和搜索课程。 –