0

我还在玩 Java,但我还没有经验……好吧,我的问题是:是否有可能动态地获取一个类的字段的值?这里有一个例子:“My_Zoo”是我的班级,它可以有不同的领域“动物”,即。狗1,狗2,鸡1,...

但我想动态获取它们的值(即公共字段'Number_of_arms')。

因此,对于 My_Zoo 类,我只有一个 Field 变量,我想从中获取值“Number_of_arms”。

我使用抽象类的原因是我回家对系统说:' Field字段是'动物'类型,然后给我参数'Number_of_arms'的值'

可能吗 ?

    public class My_Zoo{

        public abstract class Animal{
            String name;
            String color;
            int Number_of_arms;
            public String getName(){
                return name;
            }
            public int getNumber_of_arms(){
                return Number_of_arms;
            }            
        }

        public class Dog extends Animal{
            public Dog(String name, String color){
                this.name = name;
                this.color = color;
                this.Number_of_arms = 4;
            }
        }

        public class Chicken extends Animal{
            public Chicken(String name, String color){
                this.name = name;
                this.color = color;
                this.Number_of_arms = 2;
            }        
        }

        Dog dog_Charlie = new Dog("Charlie", "black");
        Dog dog_Bobo = new Dog("Bobo", "brawn");
        Chicken chicken_Princess = new Chicken("Princess", "brawn"); 

        public My_Zoo(){
            Field[] fields = this.getClass().getDeclaredFields();
            int Number_of_arms;

            for (Field field: fields){
                ??? Number_of_arms = field...Number_of_arms ???
            }
        }
    }

在代码中,??? Number_of_arms = field...Number_of_arms ???缺少该行。我必须使用什么?

谢谢

4

2 回答 2

3

希望对您有所帮助:

for (Field field : fields) {
    Animal temp = (Animal) field.get(this);
        System.out.println(temp.getName() + ": " + temp.getNumber_of_arms());
    }
}
于 2018-10-10T13:36:36.693 回答
-1

是的,这是可能的。

例子:

你的对象是:动物动物;

并且您想获取动物对象中字段的值。

Field[] fields = Animal.class.getDeclaredFields();
for(Field field:fields){
    if(field.getName().contains("Number_of_arms")){
        int Number_of_arms = field.getInt(animal);
    }
}

https://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Field.html

于 2018-10-10T13:43:08.980 回答