【发布时间】:2015-05-25 17:31:38
【问题描述】:
我想创建注释(我可以为它设置某种id),我可以把它放在变量上,并编写方法,通过注释设置的id返回这个变量的getter或setter方法;
作为示例,我做了类似的事情,但仅用于方法,所以我需要两个注解用于 setter 和 getter 方法,或者向一个注解添加更多参数。也许可以为变量创建一个注释,然后找到我需要的方法(setter 或 getter)?
我做了什么:
注解类:
public @interface FieldRawValue {
String value() default "";
}
带有 getter 和 setter 的模型类(带有 getter 注释):
公共类 PajamuModel 扩展 AbstractModel{
private String id;
private String pajamuType;
private String pajamuSource;
private Date pajamuData;
private double pajamuSuma;
private String valiuta;
private String note;
@FieldRawValue(value = "pajamuType")
public String getPajamuType() {
return pajamuType;
}
public void setPajamuType(String pajamuType) {
this.pajamuType = pajamuType;
}
@FieldRawValue(value = "pajamuSource")
public String getPajamuSource() {
return pajamuSource;
}
public void setPajamuSource(String pajamuSource) {
this.pajamuSource = pajamuSource;
}
@FieldRawValue(value = "pajamuData")
public Date getPajamuData() {
return pajamuData;
}...
通过注解值返回数据的方法:
public class AbstractModel {
public Object get(String fieldName) {
Class<? extends AbstractModel> obj = this.getClass();
for (Method method : obj.getDeclaredMethods()) {
if (method.isAnnotationPresent(FieldRawValue.class)) {
FieldRawValue annotation = method
.getAnnotation(FieldRawValue.class);
if (annotation.value().equals(fieldName)) {
try {
return method.invoke(obj);
} catch (IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
e.printStackTrace();
return null;
}
}
}
}
return null;
}
顺便说一句,没有测试get(String fieldName) 方法,但我希望它可以工作。
那么是否可以在变量上设置注释,然后在需要时找到 set 或 get 方法?
【问题讨论】:
标签: java annotations