正如标题已经说过的那样,我想知道是否有可能使用 Eclipse 在 Java 中为类赋予不同的文件名?
编辑:我只想知道 Eclipse 是否可行。如果您不知道答案,请抵制以居高临下的答案回应的冲动。
编辑2:我在这里得到什么样的回应很有趣。我只想知道是否有可能有一个具有不同文件名的类(我的意思是公共类),仅此而已。我以为这是问这些问题的那种论坛,但我得到的第二个回答已经是一种侮辱。这是某种禁忌问题还是发生了什么?
您的文件名应始终与您的班级名称相匹配,故事结束。尽管 JLS 没有明确说明必须这样做,但他们将其留给编译器的实现来做出决定。我很确定大多数(如果不是全部)不会让您与该标准有所不同。
当包存储在文件系统中时(第 7.2.1 节),如果在由类型名称加上如果以下任一情况为真,则为扩展名(例如 .java 或 .jav):
- 该类型由声明该类型的包的其他编译单元中的代码引用。
- 该类型被声明为公共的(因此可以从其他包中的代码中访问)。
这个限制意味着每个编译单元最多只能有一个这样的类型。这个限制使得 Java 编程语言的编译器或 Java 虚拟机的实现很容易在包中找到命名类;例如,公共类型wet.sprocket.Toad 的源代码可以在目录wet/sprocket 中的文件Toad.java 中找到,相应的目标代码可以在同一目录中的文件Toad.class 中找到。
因此,虽然您可以在 eclipse 或您的文件系统中重命名文件本身 - 您很可能会遇到编译错误。
我不知道您为什么要这样做,但是如果您在符号链接的帮助下从命令行编译文件,这是可能的。
假设您已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+ 上肯定有效。
以下是您可以使用不同类名的情况。
1.class不是公共类,存在于一个至少定义了一个公共类的java文件中
class notpublic{
}
public class PublicClass {
}
2.Class 是一个 InnerClass 。
public class PublicClass {
class InnerClass{
}
}
Eclipse 与 Java 编程语言的命名约定或规则有什么关系?Eclipse 只是一个 IDE,如果您使用 Java,则必须遵守它的规则。
假设您有X.java
文件。这意味着您public / abstract / final class named X
在此文件中只能有一个。对类的数量及其名称以及它们之间的嵌套关系没有限制,只要不超过一个类将文件名作为其类名即可。如果一个类采用文件名,那么它应该有一个或多个这些修饰符:public, static, final.
这就是故事。
不,Java 的公共类和文件必须具有相同的名称。
如果您尝试为该类指定另一个名称,编译器将失败并显示
class YourClass is public, should be declared in a file named YourClass.java
但是您可以在包含公共类的文件中声明其他私有类。