【问题标题】:How to pass a type (generic) to an annotation?如何将类型(通用)传递给注释?
【发布时间】:2021-01-31 20:21:06
【问题描述】:

我想做一个注释,生成一个具有默认返回值的方法。因为注解不能是通用的,所以我必须以某种方式获取它注解的方法的返回类型。

我的目标是用 return <defaultReturnValue> 替换该方法,默认 defaultReturnValue 取决于传递给注释的值。

<?> 是注解方法的返回类型。

public @interface WhenDisabled{
    <?> defaultReturn();
}

@WhenDisabled(1)
int foo1() {
    // ... complicated calculation
    return result;
}

class MyClass {
    
}

@WhenDisabled(new MyClass())
MyClass foo2() {
    // ... complicated calculation
    return result;
}

在此示例中,foo1 的正文应替换为 return 1;foo2 的正文应替换为 return new MyClass();

【问题讨论】:

    标签: java reflection annotations


    【解决方案1】:

    JLS section 9.6.1中所述,注解元素的类型(注解类型中方法的返回类型)只能是:

    • 原始类型
    • String
    • Class 或调用 Class
    • 枚举类型
    • 注释类型
    • 一种数组类型,其组件类型是上述类型之一。

    您最好将信息编码为String

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-10
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多