Получить значение параметра, используя «Отражение» - PullRequest
0 голосов
/ 10 октября 2018

Я все еще играю с Java, и у меня нет опыта .... Хорошо, мой вопрос: возможно ли динамически получить значение полей класса?Вот пример: «My_Zoo» - это мой класс, который может иметь разные поля «животное», т.е.dog1, dog2, chitchen1, ...

Но я хочу получить их значение динамически (например, общее поле 'Number_of_arms').

Итак, для класса My_Zoo у меня есть только одна переменная поляи из него я хочу получить значение Number_of_arms.

Причина, по которой я использую абстрактный класс, заключается в том, что я вынужден сказать системе: ' Поле Field является' animal 'затем введите значение параметра 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 ???.Что я должен использовать?

Спасибо

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Да, это возможно.

Пример:

Ваш объект: Животное животное;

, и вы хотите получить значение полей в объекте животного.

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

0 голосов
/ 10 октября 2018

Надеюсь, это поможет вам:

for (Field field : fields) {
    Animal temp = (Animal) field.get(this);
        System.out.println(temp.getName() + ": " + temp.getNumber_of_arms());
    }
}
...