【问题标题】:static import for constants in same file静态导入同一文件中的常量
【发布时间】:2021-09-29 16:17:52
【问题描述】:

要在同一类的注解中引用类常量,引用必须以类名作为前缀:

package example;

@MyAnnotation(someAttribute = SomeClass.someConstant)
public class SomeClass {

    public static final someConstant = "...";

}

由于在使用多个常量/字符串连接时这会变得相当庞大,我可以简单地在同一个文件中使用以下导入指令来消除对这些前缀的需要:

package example;

import static example.SomeClass.*;

@MyAnnotation(someAttribute = someConstant + more + constants)
public class SomeClass {

    public static final someConstant = "...";
    public static final more = "...";
    public static final constants = "...";

}

有什么反对的吗,或者这会在什么时候导致问题/模棱两可?

Java 语言规范第 7.5.4 章静态导入按需声明v8v11v17

【问题讨论】:

    标签: java static-import


    【解决方案1】:

    有什么反对的吗

    不,没关系。

    这何时会导致问题/歧义?

    当您在文件中定义名称与导入冲突的符号时非常疯狂。

    例如:

    package example;
    
    import static example.SomeClass.*;
    
    class SomeClass {
      static int foo;
    
      void bar() {
        foo = 1;
    
        String foo = "";
        
        System.out.println(foo);  // Prints the local variable.
      }
    }
    

    但是如果你正在编写这样的代码,你应该给自己一个严厉的谈话,所以这不是一个真正的问题。

    【讨论】:

    • 谢谢。我还不太相信,因为据我所知,您的示例仅说明了正常的变量阴影。
    • @JensPiegsa 那么也许结论是“没有比变量阴影更糟糕的歧义了”? :) 这只是对读者的歧义,名称含义的规则对编译器来说是明确的。
    • 由于结果涉及重构多个类,我想小心。互联网搜索没有发现任何有用的信息。
    猜你喜欢
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 2020-07-07
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    相关资源
    最近更新 更多