如何使用import java。*来使用’java’包下的所有子包?

import java.*; 

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

如何导入所有内置类

在java中没有sub-package这样的东西。

java.util.stream不是java.util.stream的sub-pacakge。

因此, import java.util.*不会import java.util.*的类。

要导入所有内置类,您必须一次导入一个包。 但是,更好的做法是仅导入您实际需要的类。

正如您可以在Oracle文档的此链接中阅读标题的Apparent Hierarchies of Packages

首先,包似乎是分层的,但它们不是。 例如,Java API包括java.awt包, java.awt.color包, java.awt.font包以及许多以java.awt开头的包。 但是, java.awt.color包中包含java.awt.font包, java.awt.font包和其他java.awt包。 前缀java.awt (Java抽象窗口工具包)用于许多相关的包,以使关系明显,但不显示包含。

因为import some.example.Type; 只是导入类型而不是包。 import some.example.*; 意味着您要导入some.example包中包含的所有类型而不是其中的其他包。

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

这就是为什么你不能在一个import语句中导入所有内置代码。 在max,你可以在一个语句中导入包中不同文件中的所有代码,你知道import some.example.*;的方式import some.example.*;

在导入类时使用通配符可能会使类名称空间变得混乱,因此如果您在多个导入中有一个名为ClassA的类(例如,导入com.example1.*并导入com.example2.* ,其中ClassA在两者中定义,您需要只有com.example1的实现,你才会有冲突,所以只导入你真正需要使用的东西。

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

它不像您的想法,考虑当您想要使用ChannelHandler接口时,您可以import io.netty.channel.*; 或者import io.netty.channel.ChannelHandler; 但你不能使用import io.netty.*; 这就是为什么你不能import java.*;

您可以导入java.util。*它工作正常,但是当您导入特定的类而不是所有类时,它导入的时间更少,但如果您从同一个包导入太多的类,则可以使用包导入所有类。*并且需要jvm获取而不是一个接一个的时间更少。

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

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

在java中,包彼此不相关 – 没有层次结构(即使它看起来像它),只是包的扁平名称。

至于你如何规避这一点,我认为唯一的方法是迭代所有包并根据该迭代生成你的java代码。 没有直接的方法可以做到这一点。