代码之家  ›  专栏  ›  技术社区  ›  uzay95

为什么我不能给类指定与文件名不同的名称?

  •  9
  • uzay95  · 技术社区  · 15 年前

    当我要创建一个Java类时,它会自动生成一个名为class的文件。

    但是当它生成一个类时,它可以更改文件名,而不是类名。 我错过什么了吗?

    alt text http://content.screencast.com/users/uzay95/folders/jing/media/9533b1df-6194-4660-aada-2f7c4e0df6c0/2009-12-24_1603.png

    .

    alt text http://content.screencast.com/users/uzay95/folders/Jing/media/9533b1df-6194-4660-aada-2f7c4e0df6c0/2009-12-24_1603.png

    4 回复  |  直到 15 年前
        1
  •  4
  •   skaffman    15 年前

    语言规范本身并不规定这一点(我刚刚看了一眼,找不到对它的引用),但它通常是由工具强制执行的。它使工具的依赖性管理变得更加容易,因为如果类A引用了类B,它知道在哪里查找它。该约定扩展到与包结构相呼应的目录结构,但同样,这只是一种约定。

        2
  •  9
  •   Glen    15 年前

    因为语言设计者这么说。这真的很简单。这是惯例,他们强迫你遵守。

        3
  •  7
  •   Pascal Thivent    15 年前

    引用章节 7.6 Top Level Type Declarations Java Language Specification :

    当包存储在文件中时 系统 (§7.2.1) ,主机系统 可以选择强制执行限制 这是一个编译时错误,如果 在下的文件中找不到类型 由类型名称加上 扩展(例如 .java .jav ) 如果以下任一项为真:

    • 该类型由包的其他编译单元中的代码引用 其中声明了类型。
    • 类型已声明 public (因此有可能进入 来自其他包中的代码)。

    这一限制意味着 对于每个 编制单位。这个限制 使编译器更容易 Java编程语言 Java虚拟机的实现 机器在 包;例如,源代码 对于公共类型 wet.sprocket.Toad 会在文件中找到 Toad.java 在目录中 wet/sprocket 和 相应的对象代码是 在文件中找到 Toad.class 在 相同的目录。

    当包存储在数据库中时 (§7.2.2) ,主机系统必须 不施加此类限制。在 实践,许多程序员选择 将每个类或接口类型放入 它自己的编译单元,无论 不是公开的,也不是由 其他编译单元中的代码。

        4
  •  1
  •   Sergey Mirvoda    15 年前

    如果我能改变世界,我希望设计师也能做到。 从迫使人们不创建文件classes.cs并将所有代码都放在其中可以节省多少时间。它不是像if的大括号要求那样吗?为什么语言强迫我做那些愚蠢的事情:

    if (true)
    {
    
    }
    

    而不是

    if true
    {
    
    }
    

    :-)