2012-12-08 49 views
-1

我想将包重定向到另一个包。例如,我有一个名为“packageA”的包,另一个名为“packageB”,导入packageA将导入packageB。我希望能够在不复制软件包的情况下做到这一点。此外,有没有办法运行一个方法,如果packageA导入,而不是packageB?将包重定向到另一个包

+4

不可行。抱歉。 –

+0

Java没有这个“功能”。 –

+3

你为什么想要这样做? –

回答

1

让我们看看import声明是如何工作的:

首先,import仅导入类或接口。它从来没有进口一个包。特别是,像

import java.util.* 

进口的所有类和接口在包命名为java.util。这个软件包只是一个类和接口的容器,所以谈论“导入一个软件包”确实没什么意义。一个包本身并不是编译或运行的任何东西。

这样说,谈论“重定向”没有任何意义,因为你要重定向到什么?如果你想从“packageA”中导入一个类,只需直接导入它。

同样,从packageA导入一个类可以让你访问这个类的方法。由于该类存在于packageA中,因此尝试从packageB导入它没有任何意义。即使packageB有一个同名的类,它们也是两个不同的类。实际上,这是Java中包的主要原因:避免两个不同程序员编写的类发生名称冲突。

说了这么多,你遇到了什么问题,你试图通过“重定向导入”来解决?

+0

我想让使用我的jar的人能够使用旧的软件包名称和新的软件包名称。班级可以同时在两个包中吗? – Runemoro

+0

@Runemoro不,两个包中的两个类是两个不同的类。解决该问题的一种方法是在packageA中创建类“A”,在packageB中创建另一个名为'A'的类,该类扩展'packageA.A'。 –

1

简短的回答:

龙答: 包是类的一部分,并import语句在编译的时候读,他们没有解释。你想要的东西必须由一个扭曲的Java编译器来完成。由于一些编译器是开源的,因此可以完成可能的,但不期望找到这样的特征。

替代答案:如果您使用NetBeans,Eclipse等IDE。有很多重构工具可以帮助您将包名更改为另一个。