';动态'-比如java注释?
我有一个依赖于注释的pojo。它具有预定义字段以及包含用户提供字段的集合:';动态'-比如java注释?,java,annotations,Java,Annotations,我有一个依赖于注释的pojo。它具有预定义字段以及包含用户提供字段的集合: public class MyPOJO implements Document { private String id; private LocalString name; private LocalString desc; private List<Field> fields; public MyPOJO(final String id,
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实现文档{
私有字符串id;
私有LocalString名称;
私有LocalString描述;
私有列表字段;
公共MyPOJO(最终字符串id,
最终的LocalString名称,
最终本地字符串描述,
最终列表字段){
this.id=id;
this.name=名称;
this.desc=desc;
this.fields=字段;
}
公共字符串getId(){
返回id;
}
@索引(searchable=false,stored=true)
公共LocalString getName(){
返回名称;
}
@索引(searchable=true)
公共LocalString getDescription(){
返回描述;
}
公共列表getFields(){
返回字段;
}
}
MyPOJO是一个“通用”对象,即MyPOJO的开发人员(或消费者)具有MyPOJO中未预定义的字段,因此开发人员需要将这些附加字段放置在属性“字段”中。问题产生于这样一个事实,即集合字段中的每个对象都需要有自己的注释,以指示特定字段是存储的还是可搜索的,以便与预定义属性(如名称)保持一致
我可以想出两个选择:
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;
}
}
公共类字段{
私有字符串名称;
私人客体价值;
藏书注释;
公共字段(最终字符串名称、最终对象值、集合注释;){
this.name=名称;
这个值=值;
this.annotations=Collections.unmodifiableCollection(annotations);
}
公共字符串getName(){
返回名称;
}
公共对象getValue(){
返回值;
}
}
我对这两个选项都不太感兴趣,希望有人能给我一些建议如果你需要一个可扩展的对象模型,我会说POJO设计只是让你自己做额外的工作,而不是暴露一个元模型
也就是说,您可以让API子类的客户机
MyPOJO
,并对它们在子类中定义的属性进行注释。然后,您可以使用反射来检查您正在接收的对象的所有JavaBeans属性,并确定getter上的注释-类似于JPA的工作方式。这其实并不多文档接口是API和myPOJO的子类对象,其中包含客户机认为是标准的字段。但是客户机本身在编译时没有所有字段,需要在运行时从数据模型中提供这些字段。在这种情况下,您可能会遇到您描述的选项2–实现设置一个运行时元模型。注释是一个编译时功能,我认为没有其他方便的方法使用它们。谢谢。我尝试了选项2,但我不知道如何传递注释列表,如上面更新的问题所示。知道吗?注释也是常规的Java接口-对于运行时保留的接口,我猜是这样的Java动态生成一个实现类。如果您想重用注释接口,您必须自己实现注释接口,该接口允许您在构造函数/使用setters/中指定参数值,并为注释中声明的方法返回它们。