枚举在类范围之外声明

时间:2009-10-01 10:03:50

标签: java enums

我参加了这次面试,获得了一个软件开发人员的职位,他们给了我一些角落情况代码的测试,通常有4个选项可供选择。
其中一个问题在课堂范围之外宣布了一个枚举,我及时检查了“不编译”的答案并继续处理其他问题。 它类似于:

enum Colors {BLUE,RED,GREEN}

class Test {
    //other code, not really important with my question
}

此代码实际编译 除了这样的访谈(可能或者)可能没有用,以确定一个人是否是一个好的开发人员,让我担心的是:为什么我会声明这样的枚举?为什么我只能用enum做这个? 我做了一些测试,发现它在课堂内是可见的,但不是其他课程。

旁注:我得分很差:P。我在理论上获得了最大值,但在角落情况代码情况下接近最低可能性。我认为我不会得到这份工作。

5 个答案:

答案 0 :(得分:10)

这不仅仅是枚举。枚举只是特殊类。通常,您可以在一个文件中声明多个类(只要其中没有两个是公共的)。

答案 1 :(得分:6)

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

它实际编译,在我的Eclipse上! ; - )

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

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

  

我能用枚举做什么?

您可以根据上述限制做任何您想做的事情......

  

注意:虽然你做错了,但你不应该感觉太糟糕,因为它不是一个好习惯。在我们的CheckStyle配置中,像这样的同一文件中的外部类被视为错误!!

答案 4 :(得分:0)

枚举指定可以分配给特定类型的常量值列表。 它可以在课堂内外。