Java避免重复导入(不继承导入)

时间:2014-02-24 22:28:18

标签: java import

我已经搜索过,并没有发现任何关于这个问题的问题:

在我创建的每个类中,我必须导入一大堆文件,以便能够经常使用一些任意代码。这更令人讨厌,因为我不得不一遍又一遍地导入我自己的类,其他每一个都导致混乱,导致混乱。想象一个大项目!

使用Eclipse(我正在使用的)折叠功能和自动组织,这是一个蹩脚的贫民窟解决方案。另外Eclipse不能总是说要导入哪个文件,我必须查找它并手动添加它。 所以我说我是Java和Eclipse的小菜鸟,我必须错过真正的方法。请与我分享。

我已经搜索过并且可以找到关于“继承导入”的问题但是我对使用超级/子类导入的问题一点也不感兴趣。我所追求的是以某种方式链式导入文件。问题很简单:如果file_b从file_a导入,而file_c从file_b导入,我发现从file_a指定file_c导入是多余的常识。

更好的是,将无处不在的代码放在一个静默导入所有其他文件的文件中(例如从特定路径自动包含)。 我再说一遍:我是初学者,我不知道怎么做,所以请告诉我,即使它看起来很基本。

毕竟,编译器可以很好地将所有代码放在一个大文件中,但是我没有把它自己放在一起,因为代码是方式更具视觉效果,每个类都有自己的文件。< / p>

提前谢谢。

编辑: 我现在对发生的事情有一个更清晰的了解:

  • 包树被展平,因此“子包”(子文件夹)被视为在同一级别上

  • 必须在每个文件中导入外部,即使在同一个包中(始终);

  • 如果在同一个包装中(通常),则不必导入;

  • 如果要使用own.field(必须始终),则必须静态导入所有者。因此,自身类的主体被视为与实际类相关的新包,即访问方式。

谢谢大家的澄清。我从中学到了新的东西。

我希望有这些Eclipse功能,所以:

  • 实际使用包的树结构;如果有人制作一个子包装,那是因为他认为是依赖性的。这里有一点封装原则。否则,用户会将所有包放在同一个文件夹中,它们会更加明显,也不会产生误导。

  • 对于静态导入,它当前必须重复指定,打破了相同的无包导入逻辑。因此,要为要导入的静态类创建一个类似“透明”的限定符,即默认情况下将默认导入此类,它将解决整个问题。

2 个答案:

答案 0 :(得分:3)

无法“自动导入”或继承导入。

我想说,如果你的课程需要这么多的进口,这可能是设计有问题的标志。彼此紧密耦合的类应该在同一个包中(因此不需要相互导入)。并且类不应该依赖于他们自己的包中的许多类。

当然,util或io包(或其他实用程序或常用包)中的许多类通常需要在任何地方导入,但IDE使得导入几乎是透明的。键入类型的开头,然后键入Ctrl-space,Eclipse将自动为您完成类型并添加必要的导入。按Ctrl-Shift-O,它将添加必要的并删除不需要的。

答案 1 :(得分:3)

我担心Java就是这样。

你基本上有3个选择:

  • 使用显式单一类导入
  • 使用明确的&#34; star&#34;导入包中的类
  • 整理包裹,使相关类别在同一个包裹中,不需要导入。

没有其他&#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导入责任具有相同的效果......只是更多!