Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java避免重复导入(非继承导入)_Java_Import - Fatal编程技术网

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

Java避免重复导入(非继承导入),java,import,Java,Import,我搜索了一下,没有发现任何关于这个问题的真正问题: 在我制作的每一个类中,我都必须导入一大堆文件,以便能够经常使用一些任意代码。更让人恼火的是,我不得不一次又一次地导入自己的类,每一个类都导入其他类,导致混乱。想象一下一个大项目 有了Eclipse(这就是我正在使用的)折叠功能和自动组织,这是一个蹩脚的贫民窟解决方案。另外,Eclipse不能总是说要导入什么文件,我必须查找并手动添加它。 所以我说我对Java和Eclipse太不在行了,我肯定错过了真正的方法。请与我分享 我已经搜索过了,可以找到

我搜索了一下,没有发现任何关于这个问题的真正问题:

在我制作的每一个类中,我都必须导入一大堆文件,以便能够经常使用一些任意代码。更让人恼火的是,我不得不一次又一次地导入自己的类,每一个类都导入其他类,导致混乱。想象一下一个大项目

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

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

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

毕竟,编译器可以很好地将所有代码放在一个大文件中,但我自己并不这样做,因为代码在每个类中都有自己的文件,因此在视觉上更易于识别

先谢谢你

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

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

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

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

  • 如果要使用own.field(在任何时候),则必须静态导入own,以便将own类的主体视为相对于实际类的新包,即access-wise

谢谢大家的澄清。有一些有用的信息让我学到了新的东西

我希望有这些Eclipse特性,但是:

  • 实际使用包的树形结构;如果有人做了一个子包,那是因为他从依赖性的角度考虑问题。这里有一点封装原则。否则,用户会将所有包放在同一个文件夹中,它们会更容易看到,也不会引起误解

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

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

我想说的是,如果您的类需要这么多导入,这可能是设计有问题的迹象。相互紧密耦合的类应该在同一个包中(因此不需要相互导入)。类不应该依赖于自己包中的许多类


当然,来自util或io包(或其他实用程序或公共包)的许多类通常需要到处导入,但是ide使导入几乎透明。键入类型的开头,然后按住Ctrl键空格,Eclipse将为您自动完成该类型并添加必要的导入。点击Ctrl-Shift-O,它将添加必要的,删除不需要的。

我担心Java就是这样

您基本上有3种选择:

  • 使用显式单类导入
  • 在包中使用类的显式“星形”导入
  • 组织包,使相关类位于同一个包中,而不需要导入
没有其他“自动导入”或导入包含机制


我只想指出,大多数经验丰富的Java程序员都不会和你一样烦恼。实际上,大多数开发人员只是使用IDE提供的工具来添加/删除/组织导入。。。默认情况下,将它们折叠起来

你会习惯的。你别无选择

。。。这是一个蹩脚的犹太人区解决方案

是的,你有权发表你的意见。大多数人只会说“它工作得很好”


无论如何,我认为“明星”导入(类)是个坏主意。考虑这个例子:

import java.io.*;
import com.other.io.*;  // Some 3rd-party library

public class MyClass {
    ...
    private static File = ...
    ...
}
假设当我开发这段代码时,只有一个
文件
类。。。在
java.io
中。但是,假设几年后,
com.other
库的维护人员推出了一个新版本,定义了一个名为
com.other.io.File
的新类

  • 如果我根据库的新版本重新编译
    MyClass
    ,我现在将得到编译错误
  • 如果不重新编译,我仍然可以运行现有的
    MyClass.class
    (使用更新的库),但我的源代码将不再反映假定的现实。(理论上,我必须知道代码是何时编译的,才能理解
    文件
    所指的内容。)
与此相比,显式导入
java.io.File
。无论第三方库维护人员做什么,这始终意味着它所说的一切

简而言之,使用“星型”导入意味着其他人可以通过对第三方库进行无害且看似无关的更改来“破坏”我的代码。它们使我的代码变得脆弱


那我为什么要提到这个?因为我认为自动导入和其他“修复”Java导入的尝试可能会产生相同的效果。。。更是如此

如果您在这里编写了所有相关模块,那么您可以将它们放在同一个包中,它们将是im