我最近开始使用Java Reflection,但目前仍然坚持这一点。
所以我有这样的事情:
Class<?> dogClass = Class.forName("com.example.dog");
Object dogObject = dogClass.newInstance();
我想在这个arraylist中使用上面的对象:
List<Dog> dogList = new ArrayList();
所以在正常情况下:
for(Dog d : dogList) {
....
....
}
但是当我尝试使用java反射时,它不起作用..
for(dogObject d : dogList) {
....
....
}
请问有人可以开导我吗?谢谢。
for(dogObject d : dogList)
错了。 dogObject
是一个对象,而不是一个类型。将你的dogObject
添加到dogList
,然后像在第一个循环中那样循环它:
Class<?> dogClass = Class.forName("com.example.Dog");
Dog dogObject = (Dog)dogClass.newInstance();
List<Dog> dogList = new ArrayList<Dog>();
dogList.add(dogObject);
for (Dog dog : dogList) {
....
}
(当然你需要添加try / catch)
foreach循环的语法如下所示
for(T Obj: Objects) {
....
....
}
但是在你的代码中,你使用Obj代替T(对象类型)。这是每个循环编码的错误方式。在你的代码中dogObject是反射类dogClass的实例,所以java会抛出编译错误。