我已经搜索过,并没有发现任何关于这个问题的问题:
在我创建的每个类中,我必须导入一大堆文件,以便能够经常使用一些任意代码。这更令人讨厌,因为我不得不一遍又一遍地导入我自己的类,其他每一个都导致混乱,导致混乱。想象一个大项目!
使用Eclipse(我正在使用的)折叠功能和自动组织,这是一个蹩脚的贫民窟解决方案。另外Eclipse不能总是说要导入哪个文件,我必须查找它并手动添加它。 所以我说我是Java和Eclipse的小菜鸟,我必须错过真正的方法。请与我分享。
我已经搜索过并且可以找到关于“继承导入”的问题但是我对使用超级/子类导入的问题一点也不感兴趣。我所追求的是以某种方式链式导入文件。问题很简单:如果file_b从file_a导入,而file_c从file_b导入,我发现从file_a指定file_c导入是多余的常识。
更好的是,将无处不在的代码放在一个静默导入所有其他文件的文件中(例如从特定路径自动包含)。 我再说一遍:我是初学者,我不知道怎么做,所以请告诉我,即使它看起来很基本。
毕竟,编译器可以很好地将所有代码放在一个大文件中,但是我没有把它自己放在一起,因为代码是方式更具视觉效果,每个类都有自己的文件。< / p>
提前谢谢。
编辑: 我现在对发生的事情有一个更清晰的了解:
包树被展平,因此“子包”(子文件夹)被视为在同一级别上
必须在每个文件中导入外部,即使在同一个包中(始终);
如果在同一个包装中(通常),则不必导入;
如果要使用own.field(必须始终),则必须静态导入所有者。因此,自身类的主体被视为与实际类相关的新包,即访问方式。
谢谢大家的澄清。我从中学到了新的东西。
我希望有这些Eclipse功能,所以:
实际使用包的树结构;如果有人制作一个子包装,那是因为他认为是依赖性的。这里有一点封装原则。否则,用户会将所有包放在同一个文件夹中,它们会更加明显,也不会产生误导。
对于静态导入,它当前必须重复指定,打破了相同的无包导入逻辑。因此,要为要导入的静态类创建一个类似“透明”的限定符,即默认情况下将默认导入此类,它将解决整个问题。
答案 0 :(得分:3)
无法“自动导入”或继承导入。
我想说,如果你的课程需要这么多的进口,这可能是设计有问题的标志。彼此紧密耦合的类应该在同一个包中(因此不需要相互导入)。并且类不应该依赖于他们自己的包中的许多类。
当然,util或io包(或其他实用程序或常用包)中的许多类通常需要在任何地方导入,但IDE使得导入几乎是透明的。键入类型的开头,然后键入Ctrl-space,Eclipse将自动为您完成类型并添加必要的导入。按Ctrl-Shift-O,它将添加必要的并删除不需要的。
答案 1 :(得分:3)
我担心Java就是这样。
你基本上有3个选择:
没有其他&#34;自动导入&#34;或导入包容机制。
我只想指出,大多数经验丰富的 Java程序员都不会分享您的烦恼。实际上,大多数开发人员只是使用IDE提供的工具来添加/删除/组织导入...并默认将它们折叠起来。
你会习惯的。你没有其他选择。
......这是一个蹩脚的贫民窟解决方案
是的,嗯,你有权得到你的意见。大多数人只会说&#34;它运作良好&#34; ...
对于它的价值,我认为&#34; star&#34;进口(类)是一个坏主意。考虑这个例子:
import java.io.*;
import com.other.io.*; // Some 3rd-party library
public class MyClass {
...
private static File = ...
...
}
假设在开发此代码时,File
中只有一个java.io
类...。但是假设在几年后,com.other
库的维护者推出了一个新版本,定义了一个名为com.other.io.File
的新类。
MyClass
,我现在会收到编译错误。MyClass.class
(使用更新的库),但我的源代码将不再反映假设的现实。 (理论上,我必须知道 代码编译时才能理解File
所指的内容。)将此与明确导入java.io.File
进行对比。无论第三方图书馆维护者做什么,这总是意味着完全它所说的内容。
简而言之,使用&#34; star&#34;进口意味着其他人可以“打破”#34;我的代码通过对第三方库进行无害且看似无关的更改。他们使我的代码脆弱。
那我为什么提这个呢?因为我认为自动导入和其他尝试&#34;修复&#34; Java导入责任具有相同的效果......只是更多!