【问题标题】:Grouping Imports at Java在 Java 中对导入进行分组
【发布时间】:2019-10-31 06:19:59
【问题描述】:

Java 是否支持对导入进行分组,如下所示:

import package.{Class1,Class2}

我知道* 运算符导入子包,但我想导入特定的。


Rust 或一些现代语言支持如下:

use package::{Class1, Class2};

除了像这样逐行编写每个导入之外,还有什么替代方法吗?

import package.Class1;
import package.Class2;

【问题讨论】:

标签: java import


【解决方案1】:

Java 语言规范,7.5. Import Declarations 部分显示:

import 声明允许命名类型或static 成员通过由单个标识符组成的简单名称 (§6.2) 来引用。

[...]

  • 单一类型导入声明 (§7.5.1) 通过提及其规范名称 (§6.7) 来导入单一命名类型

  • 按需类型导入声明 (§7.5.2) 通过提及类型或包的规范名称,根据需要导入命名类型或命名包的所有可访问类型

  • 单静态导入声明 (§7.5.3) 通过给出其规范名称,从一个类型中导入具有给定名称的所有可访问的 staticmembers

  • 按需静态导入声明 (§7.5.4) 通过提及类型的规范名称,根据需要导入命名类型的所有可访问的 static 成员

如您所见,它要么是单一命名类型,要么是所有可访问类型。 list 类型没有语法。


旁注:我几乎从不查看我的代码中的 import 语句。我让 Eclipse 为我管理它(Source > Organize Imports... (Ctrl+Shift+O)),所以我并不真正关心有很多单一类型的导入语句。无论如何,导入部分都已折叠,所以我什至不必滚动过去。哦,使用好 IDE 的乐趣

【讨论】:

    【解决方案2】:

    在java中,只支持导入多个类的方式如下:

    A - 导入单个类

    import package.Class1;
    import package.Class2;
    

    B - 导入包或子包中的所有类

    import package.*;
    import package.subpackage.*;
    

    更多信息请参考 Oracle 文档:https://docs.oracle.com/javase/tutorial/java/package/usepkgs.html

    【讨论】:

      【解决方案3】:

      没有。 Java 没有使用一个语句导入一组选择类的构造。您可以从包中导入所有类型,也可以一一导入。

      使用* 可以让您从同一个包中导入所有类(而不是导入子包,如您所说):

      import package.*; //Both Class1 and Class2 are imported
      import static package.Class1.* //All static members of Class1 are imported
      

      第一种形式import package.* 通常不鼓励使用,因为名称冲突的可能性增加(来自不同包的相同类名)。这可能是 import package.{Class1,Class2} 可以提供帮助的地方,但 Java 中没有这样的构造。

      【讨论】:

      • @Andreas Typo。已修复...谢谢
      猜你喜欢
      • 2019-01-06
      • 2011-10-19
      • 2011-01-14
      • 2019-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      • 1970-01-01
      相关资源
      最近更新 更多