用Eclipse在Java中为类指定不同的文件名是否可能?

用Eclipse在Java中为类指定不同的文件名是否可能?,java,eclipse,filenames,classname,Java,Eclipse,Filenames,Classname,正如标题已经提到的,我想知道是否有可能通过Eclipse在Java中为类提供不同的文件名 编辑:我只想知道Eclipse是否可能。如果你不知道答案,请克制用屈尊回答的冲动 Edit2:我在这里得到了什么样的回应真是太好笑了。我想知道的是,是否有可能有一个具有不同文件名的类(我指的是公共类),而没有其他任何东西。我原以为这是一个提出这些问题的论坛,但我得到的第二个回答已经是一种侮辱。这是一个禁忌问题还是正在发生什么?您的文件名应该始终与您的类名匹配,故事结束。尽管JLS并没有明确说明必须这样做,但

正如标题已经提到的,我想知道是否有可能通过Eclipse在Java中为类提供不同的文件名

编辑:我只想知道Eclipse是否可能。如果你不知道答案,请克制用屈尊回答的冲动


Edit2:我在这里得到了什么样的回应真是太好笑了。我想知道的是,是否有可能有一个具有不同文件名的类(我指的是公共类),而没有其他任何东西。我原以为这是一个提出这些问题的论坛,但我得到的第二个回答已经是一种侮辱。这是一个禁忌问题还是正在发生什么?

您的文件名应该始终与您的类名匹配,故事结束。尽管JLS并没有明确说明必须这样做,但他们还是让编译器的实现来做出决定。我很确定大多数人(如果不是全部的话)不会允许你偏离这个标准

当包存储在文件系统(§7.2.1)中时,如果在由类型名加扩展名(如.java或.jav)组成的文件名下未找到类型,则主机系统可以选择强制执行以下限制,即这是编译时错误,如果满足以下任一条件:

  • 该类型由声明该类型的包的其他编译单元中的代码引用
  • 该类型被声明为public(因此可以从其他包中的代码访问)
此限制意味着每个编译单元最多必须有一个这样的类型。这种限制使得Java编程语言的编译器或Java虚拟机的实现很容易在包中找到命名类;例如,公共类型wet.sprocket.Toad的源代码可以在目录wet/sprocket中的文件Toad.java中找到,相应的目标代码可以在同一目录中的文件Toad.class中找到


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

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


假设您有
X.java
文件。这意味着您在此文件中只能有一个名为X的
公共/抽象/最终类。类的数量和名称以及它们之间的嵌套关系没有限制,只要不超过一个类将文件名作为其类名。如果类采用文件名,那么它应该有一个或多个这样的修饰符:
公共、静态、最终。
就是这样。

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

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

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

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

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

假设您将
classyourclass
保存在文件
OtherName.java
中。如果创建指向该文件的符号链接,如下所示:

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

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

编译器将查找类型并进行编译



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

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

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

class notpublic{

}
public class PublicClass {

}
2.类是一个内部类

public class PublicClass {

        class InnerClass{

        }
    }

你的意思是,像在文件
Class B.java
中声明
Class A
?除了内部类之类的东西,我不确定你是否可以(或者为什么你会)这样做。“正如标题已经说的那样……”问题的标题和主体都没有说,你为什么要做这样一件傻事(假设马塞洛描述得很准确——这个问题有点模糊)。你这样做的原因是什么?你的编辑。在Eclipse中按F2键重命名文件。尝试构建项目并观察编译器抛出错误。我不想屈尊俯就,Java就是这样——JLS规定你不应该这样做;编译器强迫您不要这样做。
如果您不知道答案,请不要急于用屈尊回答。
。我们也不喜欢你居高临下的语气。另一张海报贴出,它没有明确的Java规则,所以你在这方面是错的(或者他是错的),这只是一个日蚀现象。如果有可能改变Eclipse中的行为,这正是我想知道的。我在这个问题上没有错,请在代码中尝试一些命名类,看看结果。不,我的意思是你说这是Java规则。他说这是一件编译的事情。那么它是哪一个?编译器是如何工作的?当然,它是基于Java约定工作的。那么请告诉我规范在哪里这么说。关于这个话题,我只发现了模棱两可的说法,这很有趣。谢谢。@solaris上的Primosk编译工作正常,线程“main”java.lang.NoClassDefFoundError中出现运行时错误异常:Test1@Balaswamyvaddeman,如果我理解正确,您创建了
类Test1
,并将其保存到Test.java中。然后您创建了Test1.java到Test.java的符号链接,并尝试运行“javactest1.java”,但失败了?如果是这样的话,我会更正答案……然而,在我看来,如果您使用eclipse编译器并删除文件名,那么检查类是否会编译并运行得很好。对吗?我想它可能对interpre开放
class notpublic{

}
public class PublicClass {

}
public class PublicClass {

        class InnerClass{

        }
    }