【问题标题】:What About using import java.* for using all sub-packages under the package 'java'?使用 import java.* 来使用包'java'下的所有子包怎么样?
【发布时间】:2015-04-19 09:52:42
【问题描述】:
import java.*;

为什么我不能做这个导入? 我没有导入包'java'的特定子包中的所有类,而是尝试导入'java'包下的所有子包。

如何导入所有的内置类

【问题讨论】:

标签: java


【解决方案1】:

java中没有子包这种东西。

java.util.stream 不是java.util 的子包。

因此import java.util.* 不会导入java.util.stream 的类。

要导入所有内置类,您必须一次导入一个包。不过,最好只导入您实际需要的类。

【讨论】:

  • 我所说的“子包”是“包中的包”
  • @RSMuthuKumaran 子包只是为了显示层次结构......每个包在 java 中都是不同的
【解决方案2】:

正如您在 Oracle 文档上的 link 中所读到的,在 Apparent Hierarchies of Packages 标题下:

起初,包似乎是分层的,但实际上并非如此。为了 例如,Java API 包括一个 java.awt 包,一个 java.awt.color 包,java.awt.font 包,以及许多其他以 java.awt。但是,java.awt.color 包,java.awt.font 包和其他java.awt.xxxx 包不包含在 java.awt 包。前缀java.awt(Java 抽象窗口 Toolkit) 用于一些相关的包来制作 关系明显,但不显示包含。

【讨论】:

    【解决方案3】:

    因为import some.example.Type; 只是导入类型而不是包。 import some.example.*; 表示您正在导入 some.example 包中包含的所有类型,而不是其中的其他包。

    这是因为导入意味着该文件的代码将在运行时可供您的程序使用,并且包本身不包含任何代码。它包含具有代码的文件。

    这就是为什么您不能在单个导入语句中导入所有内置代码的原因。最多可以在单个语句中导入包中不同文件中可用的所有代码,并且您知道import some.example.*;

    【讨论】:

    • 您的解释令我满意...所以导入仅用于导入包内的类、接口...但是如何使用单个导入语句导入所有类和类型.. 如果我不想使用多个导入语句怎么办??
    • 通过使用 import some.example.*;它将在单个 import 语句中导入 some.example 包中的所有类和类型。
    • 如果我想要某个包中的所有类和类型怎么办
    • 没有得到您的问题?
    【解决方案4】:

    在导入类时使用通配符可能会使你的类命名空间变得混乱,所以如果你有一个名为 ClassA 的类在不止一次导入中(例如 import com.example1.* 和 import com.example2.* 其中ClassA 在两者中都定义并且你只需要在com.example1 中的实现)你会遇到冲突,所以只导入你真正需要使用的东西。

    大多数 IDE 允许您轻松组织导入,因此只会导入您真正需要使用的类

    【讨论】:

      【解决方案5】:

      这和你想的不一样,考虑一下当你想使用ChannelHandler接口时,你可以使用import io.netty.channel.*;import io.netty.channel.ChannelHandler;,但你不能使用import io.netty.*;,这就是为什么你不能使用import java.*;

      【讨论】:

        【解决方案6】:

        您可以导入 java.util.* 它工作正常,但是当您导入特定类而不是所有类时,导入时间会更短,但是如果您从同一个包中导入太多类,您可以使用 package.* 导入所有类而且jvm去fetch的时间更短,而不是一个一个地去。

        按照惯例,您可以使用 import package.* 如果您使用来自同一个包的太多类。

        【讨论】:

          【解决方案7】:

          为什么?因为Java按设计分为不同的包。这样你就不能用所有存在的类来污染你的命名空间,你必须实际指定你打算在哪个命名空间中使用哪些类。

          在 java 中,包不相互关联 - 没有层次结构(即使看起来很像),只是包的平面名称。

          至于如何规避这一点,我认为唯一的方法是迭代所有包并基于该迭代生成您的 java 代码。没有直接的方法。

          【讨论】:

            猜你喜欢
            • 2011-09-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-21
            • 1970-01-01
            相关资源
            最近更新 更多