如何为标有自定义注释的属性调用getter / setter?

时间:2015-04-10 15:40:19

标签: java reflection annotations apache-poi

我目前正在创建一个用于解析excel文件的自定义编组工具。我想知道如何首先找到带有自定义注释的所有属性(这需要考虑继承,因此不仅仅是getDeclaredFields),然后根据我使用的方法调用相应的getter或setter。现在,我只专注于二传手。

当前代码:

private <T> T findAnnotations(Class<T> clazz)
 {
    T obj  = null;

    Annotation[] annotations = clazz.getAnnotations();

    for(Annotation annotation : annotations)
    {
        if(annotation.annotationType() == ExcelColumn.class)
        {
            if(obj == null)
            {
                try {
                    obj = clazz.newInstance();
                } catch (IllegalAccessException | InstantiationException e) {
                }
            }
            //annotation found
            //call setter of property
            //using ChildTest sample class call setname and set parent name 
            //with string previously parsed.
            // i.e obj.setName("") and obj.setParentName("") 
        }
    }
    return obj;
}

样本类:

public class ChildTest extends Parent{
     @ExcelColumn
     private String name;
     public void setName(String name) {
          this.name = name;
     }
}

public class Parent{
     @ExcelColumn
     private String parentName;
     public void setParentName(String parentName) {
          this.parentName= parentName;
     }
 }

1 个答案:

答案 0 :(得分:2)

您可以使用反射来调用这些方法。

obj.getClass().getMethod("setName", String.class).invoke(obj, "Name");
obj.getClass().getMethod("setParentName", String.class).invoke(obj, "Parent name");