如何使用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代码。 没有直接的方法可以做到这一点。