【问题标题】:Can import statements be used anywhere besides the beginning of a Java file?除了 Java 文件的开头之外,是否可以在任何地方使用 import 语句?
【发布时间】:2016-01-26 11:04:46
【问题描述】:

在 python 中,import 语句可以放在文件中的任何地方,甚至在 classif 中。

有没有办法在 Java 中完成同样的事情?我知道不将所有导入都放在文件顶部可能是一种不好的做法,我只是想知道它是否可能以某种方式。

【问题讨论】:

    标签: java syntax import


    【解决方案1】:

    Java 文件中的第一条语句必须是(如果有的话)包语句,然后是导入语句。它们不能放置在其他位置。

    但是,可以通过使用完全限定的类名完全跳过导入(我个人不推荐)。您需要在使用短的、不合格的名称的任何地方使用它们。

    import my.package.MyClass;
    
    public class Test{
        private MyClass instance = new MyClass();
    }
    

    可以改写为:

    public class Test{
        private my.package.MyClass instance = new my.package.MyClass();
    }
    

    【讨论】:

      【解决方案2】:

      根据文档here

      要将特定成员导入当前文件,请将导入语句放在文件开头的任何类型定义之前但在包语句之后(如果有的话)。

      所以看来是不可能的。

      【讨论】:

        【解决方案3】:

        简答:不,这不可能!

        import 语句必须位于文件顶部package 语句(如果存在)之后。

        您必须知道:您可以在同一文件中的所有类/接口(包括内部/嵌套类)中使用导入的类/接口或静态方法。

        【讨论】:

          【解决方案4】:

          没有办法,除非你算上它可能会弄乱字节码。我想最好的等价物是写下您要使用的完全限定名称。

          不知道为什么你会想要。

          【讨论】:

          • import 只是编译器的快捷方式——在类文件中,一切都是完全限定的。
          【解决方案5】:

          没有。 They need to be at the top,在包声明之后。

          一个普通的编译单元由三部分组成,每一部分是 可选:

          • 包声明(第 7.4 节),给出编译单元所属包的完全限定名称(第 6.7 节)。

            没有包声明的编译单元是 未命名的包(第 7.4.2 节)。

          • 允许来自其他包的类和接口以及类和接口的静态成员的导入声明(第 7.5 节) 使用它们的简单名称来引用。

          • 类和接口的顶级声明(第 7.6 节)。

          这并不能很好地传达每个部分的顺序是严格执行的,但形式语法确实清楚地表明了这一点:

          OrdinaryCompilationUnit:
              [PackageDeclaration] {ImportDeclaration} {TopLevelClassOrInterfaceDeclaration}
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-09-18
            • 1970-01-01
            • 2022-07-03
            • 2021-10-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多