У меня есть пойо, которое зависит от аннотаций.Он имеет предопределенные поля, а также набор, содержащий поля, предоставленные пользователем:
public class MyPOJO implements Document {
private String id;
private LocalString name;
private LocalString desc;
private List<Field> fields;
public MyPOJO(final String id,
final LocalString name,
final LocalString desc,
final List<Field> fields) {
this.id = id;
this.name = name;
this.desc = desc;
this.fields = fields;
}
public String getId() {
return id;
}
@Indexed(searchable = false, stored = true)
public LocalString getName() {
return name;
}
@Indexed(searchable = true)
public LocalString getDescription() {
return desc;
}
public List<Field> getFields() {
return fields;
}
}
MyPOJO - это «универсальный» объект, т. Е. Разработчик (или потребитель) MyPOJO имеет поля, которые не предопределены в MyPOJOи поэтому разработчик должен поместить эти дополнительные поля в атрибут «поля».Проблема возникает из-за того, что каждый объект в полях Set должен иметь свои собственные аннотации, чтобы указать, сохранено ли конкретное поле или доступно для поиска, чтобы оставаться согласованным с предопределенными атрибутами, такими как name.
Я могу думать о двух вариантах:
Для каждого дополнительного поля разработчик должен будет создать анонимный класс, реализующий поле интерфейса, и внутри этого анонимного класса разработчик объявит соответствующие аннотации.
Набор 'fields' содержит сложный объект с именем поля, значением поля и аннотациями, как показано ниже.Я не могу понять, как вызвать конструктор для поля.Приведенный ниже код не компилируется, но он предназначен в качестве псевдокода для обозначения того, что я пытаюсь сделать.
Поле myfield1 = new Field ("dateofBirth", new Date (), new ArrayList ({Index.сохранен, Index.searchable}); Поле myfield2 = new Field ("модель", "330i", новый ArrayList ({Index.stored});
Нет конструкции для передачианнотации в качестве параметра: новый ArrayList ({Index.stored}.
public class Field {
private String name;
private Object value;
Collection<Annotation> annotations;
public Field(final String name, final Object value, Collection<Annotation> annotations;) {
this.name = name;
this.value = value;
this.annotations = Collections.unmodifiableCollection(annotations);
}
public String getName() {
return name;
}
public Object getValue() {
return value;
}
}
Меня не особо волнует ни одна из этих опций, и я надеюсь, что кто-то может дать мне несколько указателей