Java - 调用get方法时获取类属性名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java - 调用get方法时获取类属性名称相关的知识,希望对你有一定的参考价值。

任何人都可以澄清我,如果我在java中调用类的get / set方法时可以获得类属性名称。 我在网上看到一些东西可以使用Reflection概念获取类属性名称。

我的情况: 尝试编写一个方法来检查null / empty的属性值,并在属性值为null / empty时返回属性名称。

例:

类:

public class MyClass {
  private appName;

  public void setAppName(String appName) {
  this.appName = appName;
  }

  public String getAppName() {
  return this.appName;
  }
}

验证方法:

public String validateForNull(MyClass myclass) {
   String name = myclass.getAppName();
   if(name == null || name.isEmpty()) {
   return //here I want to return attributeName which will be "appName"
   }
}

我意识到返回代表属性名称的常量字符串将更容易和方法的整洁方式。但我想知道我是否可以将其作为一种通用方式来实现,其中validate方法获取类对象并检查null / empty的所有/指定属性,并返回null / empty值的属性名称。

谢谢

答案

您无法获取调用getter或setter的属性的名称。

顺便说一句,您无法保证您调用的方法只是设置或返回一个简单的属性。

但是你是对的,你可以通过反射获得给定对象的属性值。

   public String validateForNull(MyClass myclass) throws IllegalArgumentException, IllegalAccessException {
        // Get the attributes of the class
        Field[] fs = myclass.getClass().getFields();
        for(Field f : fs) {
            // make the attribute accessible if it's a private one
            f.setAccessible(true);

            // Get the value of the attibute of the instance received as parameter  
            Object value = f.get(myclass);
            if(value == null) {
                return f.getName();
            }
        }
        return null;
     }

做这样的事情需要比if(value == null)更完整的测试,因为我想你可以拥有几种类型的属性,每种类型都有特定的验证。

如果您决定采用这种方式,则可以使用注释来标识要验证和使用的属性:

Annotation[] ans =  f.getAnnotations();

检查属性上是否存在注释,从而仅验证必填字段

另一答案

最好避免反思。而不是尝试自动查找名称,将其作为参数传递:

public String validateForNull(String attributeValue,
                              String attributeName) {

    if (attributeValue == null || attributeValue.isEmpty()) {
        return attributeName;
    }
    return null;
}

// ...

String emptyAttribute =
    validateForNull(myclass.getAppName(), "appName");

以上是关于Java - 调用get方法时获取类属性名称的主要内容,如果未能解决你的问题,请参考以下文章

关于java编程的问题:一个类调用另一个类中构造方法中所定义的参数。

关于用java反射调用一个类里面的方法并执行

Java 反射

说说对java反射的理解,使用反射如何获取一个类的所有方法,使用反射需要注意哪些问题?

java中如何通过反射获取类的属性

JAVA基础之Static