-1

正如标题已经说过的那样,我想知道是否有可能使用 Eclipse 在 Java 中为类赋予不同的文件名?

编辑:我只想知道 Eclipse 是否可行。如果您不知道答案,请抵制以居高临下的答案回应的冲动。

编辑2:我在这里得到什么样的回应很有趣。我只想知道是否有可能有一个具有不同文件名的类(我的意思是公共类),仅此而已。我以为这是问这些问题的那种论坛,但我得到的第二个回答已经是一种侮辱。这是某种禁忌问题还是发生了什么?

4

5 回答 5

7

您的文件名应始终与您的班级名称相匹配,故事结束。尽管 JLS 没有明确说明必须这样做,但他们将其留给编译器的实现来做出决定。我很确定大多数(如果不是全部)不会让您与该标准有所不同。

JLS 指出:

当包存储在文件系统中时(第 7.2.1 节),如果在由类型名称加上如果以下任一情况为真,则为扩展名(例如 .java 或 .jav):

  • 该类型由声明该类型的包的其他编译单元中的代码引用。
  • 该类型被声明为公共的(因此可以从其他包中的代码中访问)。

这个限制意味着每个编译单元最多只能有一个这样的类型。这个限制使得 Java 编程语言的编译器或 Java 虚拟机的实现很容易在包中找到命名类;例如,公共类型wet.sprocket.Toad 的源代码可以在目录wet/sprocket 中的文件Toad.java 中找到,相应的目标代码可以在同一目录中的文件Toad.class 中找到。

因此,虽然您可以在 eclipse 或您的文件系统中重命名文件本身 - 您很可能会遇到编译错误。

于 2012-02-21T08:04:16.520 回答
3

我不知道您为什么要这样做,但是如果您在符号链接的帮助下从命令行编译文件,这是可能的。

假设您已class YourClass保存在文件中OtherName.java。如果您像这样创建指向该文件的符号链接:

UNIX 系统:(肯定不能在 Solaris 上工作 - 其他系统未经验证)

ln -s OtherName.java YourClass.java
javac YourClass.java

WINDOWS系统:(适用于Windows Vista/2008+)

mklink YourClass.java OtherName.java
javac YourClass.java

编译器找到类型和编译工作......


此解决方案未在 Unix 系统上验证,但在 Windows Vista/2008+ 上肯定有效。

于 2012-02-21T08:23:31.090 回答
1

以下是您可以使用不同类名的情况。

1.class不是公共类,存在于一个至少定义了一个公共类的java文件中

class notpublic{

}
public class PublicClass {

}

2.Class 是一个 InnerClass 。

public class PublicClass {

        class InnerClass{

        }
    }
于 2012-02-21T08:38:00.720 回答
1

Eclipse 与 Java 编程语言的命名约定或规则有什么关系?Eclipse 只是一个 IDE,如果您使用 Java,则必须遵守它的规则。

假设您有X.java文件。这意味着您public / abstract / final class named X在此文件中只能有一个。对类的数量及其名称以及它们之间的嵌套关系没有限制,只要不超过一个类将文件名作为其类名即可。如果一个类采用文件名,那么它应该有一个或多个这些修饰符:public, static, final.这就是故事。

于 2012-02-21T08:07:57.677 回答
1

不,Java 的公共类和文件必须具有相同的名称。

如果您尝试为该类指定另一个名称,编译器将失败并显示

class YourClass is public, should be declared in a file named YourClass.java

但是您可以在包含公共类的文件中声明其他私有类。

于 2012-02-21T08:08:01.787 回答