【问题标题】:Is there a Java IDE that supports the same package and class names? [closed]是否有支持相同包名和类名的 Java IDE? [关闭]
【发布时间】:2014-05-30 16:03:19
【问题描述】:

大家。我有一个 Java Eclipse 项目。它包含很多包,类名可以和包相同,就像:

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

编译项目时,Eclipse报错:“xxx”类型与包冲突。那么是否有支持相同包名和类名的 Java IDE?或者有没有办法只在 Eclipse 中编译它?

【问题讨论】:

  • 我不确定您的“a.java”文件中有什么,但您在其中明确指定了您所指的包。例如,也许您在文件“a.java”中有一个名为“test”的类;然后在你的代码中引用它,你是在调用“org.a.a.test”吗?并在文件中导入“org.a.a.test”。
  • 简短的回答是否定的,如果你在不同的包中有同名的类,你需要使用它们的绝对名称(package.name)在你的代码中引用它们,这就是要点具有包名称空间。因此,在您的代码中,您需要明确使用org.a.aorg.a.a.a,而不是使用import 语句...

标签: java eclipse ide


【解决方案1】:

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

因此,在您的代码中,您需要明确使用org.a.aorg.a.a.a,而不是使用import 语句...

例如...

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

【讨论】:

  • 但是jar文件中的类可以容忍同名包和类,对吧?是否有软件可以重命名 jar 中的类,所以我可以使用 Eclipse 来编译它?如果不是,我自己怎么写这样的软件?
  • 是的,但是 Jars 中的类存储在它们的包目录中。不,您可以重命名它们。要使用它们,您需要通过绝对引用来引用您想要的类,如所示,是的,我们一直这样做......看看java.util.Datejava.sql.Date
  • 是否有编程方式重命名类(jar)中的符号(如包名,类名),我们知道Eclipse可以在没有发生编译错误时使用重构重命名,但我有错误现在,所以我不能使用 Eclipse。这个程序包含了这么多类,所以很难手动更改它们
  • 你不能用这种方式修改字节码(或者至少你不应该这样做)。
【解决方案2】:

这不是 Eclipse 问题,而是 Java 功能。

The Java Language Specification makes the following restrictions

包的成员是它的子包和所有的顶级 类类型(§7.6,§8(类))和顶级接口类型(§9 (接口))在所有编译单元(§7.3)中声明 包。

一个包不能包含两个同名的成员,或者一个 编译时错误结果。

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


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

【讨论】:

  • 但是jar文件中的类可以容忍同名包和类,对吧?是否有软件可以重命名 jar 中的类,所以我可以使用 Eclipse 来编译它?如果没有,我自己怎么写这样的软件?
  • @hsluoyz 不,他们不应该。如果 JAR 是手动创建的,也许。但是编译器永远不应该允许它。 这是 Java 限制。
猜你喜欢
  • 2012-01-11
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-11
  • 2013-03-28
  • 2014-08-25
  • 2023-01-07
相关资源
最近更新 更多