【问题标题】:Dynamically passing key to @Named annotation将密钥动态传递给 @Named 注释
【发布时间】:2011-09-17 23:29:52
【问题描述】:

我正面临以下问题。任何人都可以帮助理解为什么会这样吗? 另外请分享您对使第二个场景起作用的想法。

  1. 这没有任何编译问题,

    private final String var ="US";
    @Inject @Named (var) private Validator validator; 
    
  2. 这导致编译错误, 编译错误:“注解属性 Named.value 的值必须是常量表达式”

    private final String var =System.getProperty("US");
    @Inject @Named (var) private Validator validator;
    

【问题讨论】:

    标签: java guice


    【解决方案1】:

    在第一种情况下,编译器看到一个常量已分配给一个私有 final 变量,因此它优化了该变量并使用该常量代替它。在第二种情况下它不能这样做,所以它在注释中留下了一个变量。

    【讨论】:

    • 这里的重点是注解属性必须是字面量(即常量),这是Java 5(及以上)语言指定(和实现)的方式。没有办法绕过这个事实。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2020-10-26
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    相关资源
    最近更新 更多