是否可以在java中读取注释的值?

2022-08-31 08:38:24

这是我的代码:

@Column(columnName="firstname")


private String firstName;

 @Column(columnName="lastname")
 private String lastName;

 public String getFirstName() {
  return firstName;
 }

 public void setFirstName(String firstName) {
  this.firstName = firstName;
 }

 public String getLastName() {
  return lastName;
 }

 public void setLastName(String lastName) {
  this.lastName = lastName;
 }

是否可以在另一个类中读取我的注释@Column(columnName=“xyz123”)的值?


答案 1

是,如果列批注具有运行时保留期

@Retention(RetentionPolicy.RUNTIME)
@interface Column {
    ....
}

你可以做这样的事情

for (Field f: MyClass.class.getFields()) {
   Column column = f.getAnnotation(Column.class);
   if (column != null)
       System.out.println(column.columnName());
}

更新:要获取私有字段,请使用

Myclass.class.getDeclaredFields()

答案 2

当然可以。下面是一个示例注释:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation {

    String testText();
}

以及一个带注释的示例方法:

class TestClass {

    @TestAnnotation(testText="zyx")
    public void doSomething() {}
}

另一个类中的示例方法,用于打印 testText 的值:

Method[] methods = TestClass.class.getMethods();
for (Method m : methods) {
    if (m.isAnnotationPresent(TestAnnotation.class)) {
        TestAnnotation ta = m.getAnnotation(TestAnnotation.class);
        System.out.println(ta.testText());
    }
}

对于像您这样的字段注释,没有太大区别。

欢呼!


推荐