Java注释:基于注释字段动态构建数组

Java注释:基于注释字段动态构建数组,java,jakarta-ee,java-ee-7,Java,Jakarta Ee,Java Ee 7,我必须@Override一个抽象函数并提供一个字符串数组(为我的datatable定义可搜索字段): 当我查看我的代码时,我可以想象我只是引用一个类并注释JPA列字段,例如通过@Searchable来表示此功能并构建我的数组: @Column @Getter @Setter ... @Searchable private String email; 有没有办法解决这个问题?你当然可以通过反射做任何你想做的事情。但是你也应该尝试探索其他的选择。这是我刚刚写的一个粗略的例子。它将为您提供由@ana

我必须@Override一个抽象函数并提供一个字符串数组(为我的datatable定义可搜索字段):

当我查看我的代码时,我可以想象我只是引用一个类并注释JPA列字段,例如通过@Searchable来表示此功能并构建我的数组:

@Column
@Getter
@Setter
...
@Searchable
private String email;

有没有办法解决这个问题?

你当然可以通过反射做任何你想做的事情。但是你也应该尝试探索其他的选择。这是我刚刚写的一个粗略的例子。它将为您提供由
@ananotation
注释的字段

@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface AnAnnotation {

}


public class AnnotExample {

   @AnAnnotation
   private String b;

   @AnAnnotation
   private String c;

   public static void getAnnotatedFields(final Class clazz) {
      clazz.getAnnotation(AnAnnotation.class);

      final Field[] declaredFields = clazz.getDeclaredFields();
      for (final Field field : declaredFields) {
         final AnAnnotation annotation2 = field.getAnnotation(AnAnnotation.class);
         if (annotation2 != null) {
            System.out.println(field.getName());
         }

      }
   }

   public static void main(final String[] args) {
      AnnotExample.getAnnotatedFields(AnnotExample.class);
   }

}

你当然可以做到,尽管手写很痛苦;如果你能负担得起一个外部图书馆,看看谷歌反射。嗨,非常感谢。但“你也应该尝试探索其他选择”是什么意思?
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface AnAnnotation {

}


public class AnnotExample {

   @AnAnnotation
   private String b;

   @AnAnnotation
   private String c;

   public static void getAnnotatedFields(final Class clazz) {
      clazz.getAnnotation(AnAnnotation.class);

      final Field[] declaredFields = clazz.getDeclaredFields();
      for (final Field field : declaredFields) {
         final AnAnnotation annotation2 = field.getAnnotation(AnAnnotation.class);
         if (annotation2 != null) {
            System.out.println(field.getName());
         }

      }
   }

   public static void main(final String[] args) {
      AnnotExample.getAnnotatedFields(AnnotExample.class);
   }

}