Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 动态地将密钥传递给@Named注释_Java_Guice - Fatal编程技术网

Java 动态地将密钥传递给@Named注释

Java 动态地将密钥传递给@Named注释,java,guice,Java,Guice,我面临以下问题。有人能帮助理解为什么会这样吗? 另外,请分享您对第二个场景的想法 这项工作没有任何编译问题 private final String var ="US"; @Inject @Named (var) private Validator validator; 这是给编译错误, 编译错误:“名为.value的批注属性的值必须是常量表达式” 在第一种情况下,编译器看到一个常量被分配给了一个私有的final变量,因此它优化了该变量,并在其位置使用该常量。在第二种情况下,它不能这样做

我面临以下问题。有人能帮助理解为什么会这样吗? 另外,请分享您对第二个场景的想法

  • 这项工作没有任何编译问题

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


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

    这里的重点是注释属性必须是文本(即常量),这是Java 5(及以上)语言的指定(和实现)方式。这是无法回避的事实。
    private final String var =System.getProperty("US");
    @Inject @Named (var) private Validator validator;