Как вызвать метод get-set из имени свойства класса POJO - PullRequest
0 голосов
/ 13 мая 2019

Есть ли способ вызвать метод getter / setter из моего кода, если я получу имя свойства pojo в java?Предположим, у меня есть простой ученик класса pojo

student{
   private String name;
   private int age;

   public String getName(){
      return name;
   }
   public int getAge(){
      return age;
   }
}

, теперь у меня есть имя реквизита, скажем, age, и у меня есть объект ученика, могу ли я вызвать метод getAge ().

Я знаю, что отражение - это решение, но я не нашел никакого эффективного для этого.Может ли кто-нибудь помочь мне с некоторым эффективным и простым примером кода, чтобы сделать это ...

Большое спасибо ...

Ответы [ 3 ]

2 голосов
/ 13 мая 2019

Вы можете использовать Introspector :

import java.beans.Introspector;
import java.beans.PropertyDescriptor;


...
String name = "age";
Class beanClass = Student.class;
BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);
PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor descriptor : descriptors) {
    if (!name.equals(descriptor.getName())) {
        continue;
    }
    descriptor.getWriteMethod();
    descriptor.getReadMethod()
}
0 голосов
/ 13 мая 2019

Ну, вы можете сделать звонок, если вы действительно хотите:

public class Student {
    private String name;
    private int age;
    public String getName(){
       System.out.println("getName called");
       return name;
    }
    public int getAge(){
       System.out.println("getAge called");
       return age;
    }
}

public class Test {
    public static void main(String[] args) throws Exception {
        Student s=new Student();
        System.out.println(s.getClass().getMethod("getName").invoke(s));
        System.out.println(s.getClass().getMethod("getAge").invoke(s));
    }
}

Производит

getName called
null
getAge called
0

И если у вас есть "name" или "age" в строке something, остающаяся задача сделать что-то вроде

"get"+something.substring(0,1).toUpperCase()+something.substring(1)
0 голосов
/ 13 мая 2019

Попробуйте использовать BeanUtils ,

Employee employee= new Employee ();

BeanUtils.setProperty(employee,"employeeName","Xyz ABC");
Object value = PropertyUtils.getProperty(employee, "employeeName");

при условии, что вы знаете, что все поля объекта Employee имеют:

private String employeeName;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...