Выберите свойства на основе имени и извлеките значение

#java #reflection

#java #отражение

Вопрос:

У меня есть приведенный ниже класс с получателями и установщиками.

 class A{
 private String field1Required;
 private String field2Required;
 private String field3;
 private String field4;
}
  

Предположим, в моей основной программе я получаю объект A, заполненный следующим образом,

 field1Required = false;
field2Required=true, 
field3=true; 
field4=false;
  

Итак, я хочу выбрать только field1Required , field2Required и распечатать значения этих свойств. Как я могу достичь этого с помощью отражения или любым другим способом?

Комментарии:

1. Вы ищете способ напечатать все поля, содержащие слово «Обязательно»?

2. Какая польза от класса A, если нет метода установки / получения или конструктора для инициализации объекта с этими свойствами. Для этих значений всегда будет установлено значение по умолчанию.

3. @RajaAnbazhagan Да

4. Взгляните на clazz.getDeclaredMethods() Это даст вам все объявленные объекты метода посредством отражения, из которого вы можете написать цикл, чтобы проверить, содержат ли имена методов «Обязательные». Вот так просто

5. В классе вы показываете свои поля как String затем в объекте A, говоря, что они имеют значения в виде true или false без двойных кавычек, так ли это?

Ответ №1:

Учитывая, что в вашем классе определены методы получения и установки, вы могли бы использовать что-то вроде этого для получения ваших результатов.

     A obj = new obj();
        Class clazz = data.getClass();
        Method[] arr = clazz.getDeclaredMethods();
        for (Method method : arr) {
            if (method.getName().contains("get") amp;amp; 
                    method.getName().contains("Required")) {
                System.out.println(method.invoke(obj));
            }
        }
  

Ответ №2:

 A a = new A();
    Field fields [] =a.getClass().getDeclaredFields();
    for (int i=0;i<fields.length;i  ) {
        if (fields[i].getName().contains("Required"))
            {fields[i].setAccessible(true);
           System.out.println(fields[i]);
           System.out.println(fields[i].get(a));}}
    }