如何从POJO类的属性名称调用get-set方法

时间:2019-05-13 14:03:31

标签: java java-8

如果我在Java中获得了pojo的属性名称,是否有任何方法可以从我的代码中调用getter / setter方法? 假设我有一个简单的pojo班学生

student{
   private String name;
   private int age;

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

现在我获得了道具名称,例如age,并且有一个Student对象,可以调用getAge()方法。

我知道反射是解决方案,但我发现这样做没有任何效率。有人可以通过一些有效且简单的示例代码来帮助我做到这一点吗?

非常感谢...

3 个答案:

答案 0 :(得分:2)

您可以使用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()
}

答案 1 :(得分:0)

尝试使用BeanUtils

val photoView= mView.findViewById(R.id.zoomImageView)

假设您知道Employee对象的所有字段都有:

val photoView:PhotoView= mView.findViewById(R.id.zoomImageView) as PhotoView

答案 2 :(得分:0)

好吧,如果您确实愿意,可以拨打电话:

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)