如何为标有自定义注释的 属性 调用 getter/setter?
How can I call getter/setter for property marked with custom annotation?
我目前正在创建一个自定义编组工具来解析 excel 文件。我想知道我如何首先找到所有带有自定义注释的属性(这需要考虑继承,所以不仅仅是getDeclaredFields),然后根据我使用的方法调用相应的 getter 或 setter。现在,我只关注 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;
}
样本Class:
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;
}
}
您可以使用反射来调用这些方法。
obj.getClass().getMethod("setName", String.class).invoke(obj, "Name");
obj.getClass().getMethod("setParentName", String.class).invoke(obj, "Parent name");
我目前正在创建一个自定义编组工具来解析 excel 文件。我想知道我如何首先找到所有带有自定义注释的属性(这需要考虑继承,所以不仅仅是getDeclaredFields),然后根据我使用的方法调用相应的 getter 或 setter。现在,我只关注 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;
}
样本Class:
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;
}
}
您可以使用反射来调用这些方法。
obj.getClass().getMethod("setName", String.class).invoke(obj, "Name");
obj.getClass().getMethod("setParentName", String.class).invoke(obj, "Parent name");