Я хочу создать аннотацию (для которой я могу установить какой-то идентификатор), которую я могу наложить на переменную, и написать метод, который возвращает метод getter или setter этой переменной с помощью аннотаций setted id;Явная пользовательская аннотация для поиска методов
В качестве примера я сделал что-то подобное, но только для метода, поэтому мне нужны две аннотации для метода setter и getter или добавление дополнительных параметров в одну аннотацию. Может быть, можно создать одну аннотацию для переменной, а затем найти метод, который мне нужен (сеттер или геттер)?
Что удалось сделать:
класс Аннотация:
public @interface FieldRawValue {
String value() default "";
}
Модель класса с добытчиками и сеттеров (с аннотацией для геттеров):
общественный класс 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;
}
Btw, не тестируется get(String fieldName)
метод, но я ожидаю, что это работает.
. Можно ли задать аннотацию для переменной, а затем найти метод set или get, когда мне нужно?
Хорошо, спасибо вы, как я понимаю, нет необходимости в аннотации. – Edgar
Правильно, вы можете вызвать getClass(). GetDeclaredField (fieldName), и если поле существует, попытайтесь найти getter/setter для него – rgrebski