使用Java反射类创建对象并在arraylist中使用

时间:2018-09-18 07:21:25

标签: java arraylist reflection

我最近开始使用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) {
....
.... 
}

有人可以启发我吗?谢谢。

2 个答案:

答案 0 :(得分:2)

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)

答案 1 :(得分:0)

foreach循环的语法如下所示

for(T Obj: Objects) {
....
.... 
}

但是在您的代码中,您使用的是 Obj 代替了 T (对象类型)。每个循环的编码方式是错误的。代码中的 dogObject 是反射类 dogClass 的实例,因此Java会抛出编译错误。