【问题标题】:Is it possible to get to a field annotation through a parameter without using its name as a String?是否可以通过参数获取字段注释而不使用其名称作为字符串?
【发布时间】:2017-01-31 10:13:22
【问题描述】:

是否可以从printTitle 内部访问var@Anno 实例?

class MyClass {

  @Anno(title="Title") Integer var;

  void someFunc() {
    printTitle(var);
  }

  public void printTitle(Integer param) {
    // How to get to the @Anno annotation?
    // Is it possible to get to the 'Field' where param is coming from?
    Anno anno = param. ... .getAnnotation(Anno.class);
    if(annotation != null) {
      ...
    }
  }
}

我不想将var 的名称用作字符串"var",因为以后很难重构。

【问题讨论】:

  • 对所提出问题的答案是:不。可以做的方式作为答案给出。如果您不想将字段名称用作String,请不要编写代码,使其依赖于字段名称。而是处理所有字段。或者,如果你明显地试图做一些“太聪明”的事情,就改变你的整个设计。

标签: java parameters annotations field


【解决方案1】:

您无法从String 获取注释,您需要一个代表String varField 对象。

  void someFunc() {
    printTitle("var");
  }

  public void printTitle(String field) {
    Anno anno = getClass().getField(field).getAnnotation(Anno.class);
    if(annotation != null) {
      ...
    }
  }

【讨论】:

  • 好的,但是您使用field 作为反射名称,它只能在运行时检查。我宁愿在编译时检查它。我会在我的问题中澄清这一点。
  • 你想要什么并不重要,因为你不能拥有它。这是我的解决方案还是没有,你不能引用var作为变量,你只能通过从类中获取"var"字段来获取字段。
  • 这也是我所担心的。我承认我希望有一些神奇/创造性的想法。如果它保持不变,您的答案将被接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-02
  • 2022-11-11
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
相关资源
最近更新 更多