Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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
是否有支持相同包和类名的JavaIDE?_Java_Eclipse_Ide - Fatal编程技术网

是否有支持相同包和类名的JavaIDE?

是否有支持相同包和类名的JavaIDE?,java,eclipse,ide,Java,Eclipse,Ide,大家好。我有一个JavaEclipse项目。它包含许多包,类名可以与包相同,如下所示: org.a a.java <--------- this class is org.a.a b.java org.b a.java org.a.a <---------- this package is also org.a.a a.java b.java org.a a、 java简短的回答是否定的,如果不同包中的类具有相同的名称,则需要在代码中使用它们的绝对名称(pack

大家好。我有一个JavaEclipse项目。它包含许多包,类名可以与包相同,如下所示:

org.a
  a.java <--------- this class is org.a.a
  b.java
org.b
  a.java
org.a.a <---------- this package is also org.a.a
  a.java
  b.java
org.a

a、 java简短的回答是否定的,如果不同包中的类具有相同的名称,则需要在代码中使用它们的绝对名称(package.name)来引用它们,这就是使用包名空格的意义所在

因此,在代码中,您需要显式地使用
org.a.a
org.a.a.a
,而不是使用
import
语句

例如

org.a.a a1 = new org.a.a();
org.a.a.a a2 = new org.a.a.a();

这不是Eclipse问题,而是Java特性

包的成员是其子包和所有顶层 类类型(§7.6、§8(类))和顶级接口类型(§9 (接口)声明的所有编译单元(§7.3) 包裹

不能包含两个同名的成员,也不能包含 编译时错误结果

在您的示例中,
org.a
是一个包。您希望它有两个成员:类型
org.a.a
和包
org.a.a
Java语言不允许这样做。



Java约定规定包名应以小写字母开头,而类型名应以大写字母开头。如果您遵循这些约定,则永远不会出现此类问题。

我不确定您的“a.java”文件中有什么内容,但您在其中明确指定了所引用的包。例如,您可能在文件“a.java”中有一个名为“test”的类;那么,要在代码中引用它,您是否调用“org.a.a.test”?并在文件中导入“org.a.a.test”。简短的回答是否,如果不同包中的类具有相同的名称,则需要使用它们的绝对名称(package.name)在代码中引用它们,这就是使用包名空格的意义。因此,在代码中,您需要显式地使用
org.a.a
org.a.a.a
,而不是使用
import
语句……但是jar文件中的类可以容忍包和类的名称相同,对吗?有没有软件可以重命名jar中的类,这样我就可以使用Eclipse来编译它?如果没有,我怎么能自己编写这样的软件?@hsluoyz不,他们不应该。如果JAR是手动创建的,那么可能。但是编译器不应该允许它。这是Java的一个限制。但是jar文件中的类可以容忍包和类的名称相同,对吗?有没有软件可以重命名jar中的类,这样我就可以使用Eclipse来编译它?如果不是,我怎么能自己编写这样的软件呢?是的,但是JAR中的类存储在它们的包目录中。不,您可以重命名它们。要使用它们,您需要通过绝对引用引用所需的类,如所示,是的,我们一直都在这样做……看看
java.util.Date
java.sql.Date
是否有一种编程方法来重命名类(jar)中的符号(如包名、类名),我们知道Eclipse可以在没有编译错误发生时使用重构重命名,但我现在有错误,所以我不能使用Eclipse。这个程序包含太多的类,所以很难手动更改它们。你不能用这种方式修改字节码(或者至少你不应该这样做)。