Java注释: dynamically build array based on annotated fields

标签 java jakarta-ee java-ee-7

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

@Override
public String[] getQueryFields() {
    return new String[] { "email", "firstname", "lastname", "lastLogin"};
}

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

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

有办法解决这个问题吗?

最佳答案

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

@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);
   }

}

关于Java注释: dynamically build array based on annotated fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22320523/

相关文章:

java - 在托管 bean 中使用 ModelMapper 库的自定义映射会导致 NullPointerException

java - Wildfly 8 安全域适用于简单的应用程序,但不适用于更复杂的应用程序

java - 无法通过持久性删除来删除 jpa 子实体

java - 如何使用在应用程序的 main 方法中初始化的 Spring 提取 Hibernate DB 记录

java - 如何使用 Jersey JSON POJO 支持?

java - 超过锁定等待超时;尝试在 spring_Hibernate_Mysql 中重启事务

java - JAX-RS 客户端 : ResponseProcessingException handling

java - Android音译获取API_KEY的方法

java - Employee 和 EmployeeDemo,如何获得两个独立员工的以下输出?

java - 五个连续数字的最大乘积