代码之家  ›  专栏  ›  技术社区  ›  Alberto Zaccagni

在类作用域外声明的枚举

  •  12
  • Alberto Zaccagni  · 技术社区  · 15 年前

    我去面试一个软件开发人员的职位,他们给我做了一个测试,有一些角落的案例代码情况,通常有4个选择。
    其中一个问题有一个枚举被声明在类范围之外,我立即检查了“不编译”的答案并继续处理其他问题。 有点像:

    enum Colors {BLUE,RED,GREEN}
    
    class Test {
        //other code, not really important with my question
    }
    

    这段代码实际上是编译的。
    除了像这样的一个面试(可能或者)对于发现一个人是否是一个优秀的开发人员可能没有帮助之外,我担心的是:我为什么要声明这样的枚举?为什么我只能用enum做这个? 我做了一些测试,发现它在类中是可见的,但对其他类是不可见的。

    旁注:我的得分真的很差:P。我在理论上得到了最大值,但在角落的案例代码情况下接近了最低值。我想我不会得到那份工作的。

    5 回复  |  直到 15 年前
        1
  •  10
  •   newacct    15 年前

    不仅仅是枚举。枚举只是一种特殊的类。一般来说,一个文件中可以声明多个类(只要其中没有两个是公共的)。

        2
  •  6
  •   Bart Kiers    15 年前

    不,如果没有访问修饰符,枚举是包私有的。这意味着它只能由同一个包中的类使用。你不仅可以用枚举来实现这一点,类也可以被设为私有包。

    更多信息: http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html

        3
  •  1
  •   Andrzej Doyle    15 年前

    有时候这个成语是很有道理的,例如,假设你有一个 UploadHandler 类(或类似的类),可以从上载返回状态。在我看来,将此状态实现为枚举是非常可行的,因为枚举(例如 UploadStatus )显然“属于”uploadhandler类,在同一个源文件中声明它似乎很好。(这当然假设它只需要是包私有的——如果它是真正的公共的,那么它需要在自己的文件中声明,如果它不再是一个内部的东西,这可能是有意义的)。

    碰巧,在这种情况下,我可能会使它成为一个静态的内部类,以使关系更加明确。但是在同一个源文件中声明多个类并不总是不好的,有时可以通过设置期望这是一个边界琐碎的子类来帮助可读性。(同样,我认为这样的类不应该做任何特别复杂或意外的事情。)

        4
  •  0
  •   KLE rslite    15 年前

    它实际上是在我的eclipse上编译的!;-)

    允许多个类位于同一文件中。限制是必须在具有相同名称的文件中定义公共类。

    它的可见性是'package',所以它也应该在同一个包中的其他类中可见。

    我能用这个枚举做什么?

    有了以上的限制,你可以做任何你想做的事…

    注意:虽然你错了,但你不应该感觉太糟,因为 不是很好的做法 要么。在我们的checkstyle配置中,像这样的文件中的外部类被视为错误!!

        5
  •  0
  •   Madhu    15 年前

    枚举指定可分配给特定类型的常量值列表。 它可以在教室里,也可以在教室外面。