关于Java枚举的问题

时间:2009-02-25 19:12:53

标签: java enums

我有两个互相交互的文件。我想定义一个枚举以使代码更具可读性,但如果我在文件1中定义它,则文件2抱怨不知道所述枚举。如果我在文件2中定义ii,则文件1也会这样做。我也将其定义为公开。

解决方案是在两个文件中定义枚举,但这对我来说似乎不对。它不仅是多余的,而且我担心它可能会引起一些冲突,即使这些类型具有相同的项目。

对此的判断是什么?我做错了什么或担心太多了?

修改

好吧,鉴于这里的评论,我找到了一个替代方案,似乎正在做我想要的,而不必创建一个新文件。我有:

档案1

class myClass1
{
    public enum MyEnum
    {
        ...
    }
    ...
}

文件2

class myClass2
{
    public enum MyEnum
    {
        ...
    }
    ....
}

现在,我有:

档案1

enum myEnum
{
    ...
}

...

class myClass1
{
     ...
}

文件2

class myClass2
{
     ...
}

我不想为枚举创建另一个文件,所以这对我有用。好吧,只要它没有任何问题,我认为没有。

4 个答案:

答案 0 :(得分:12)

您绝对不应该在两个位置定义枚举。我建议使用公共可访问性在其自己的文件中定义枚举。然后每个人都应该没有问题访问它。但是,假设您要在两个类之一中定义枚举,我将继续......

您必须import枚举或使用其完全限定名称。假设您在包com.stackoverflow中,您的类应该在第一个文件中看起来像这样:

package com.stackoverflow;

public class A {
    public enum MyEnum {
      ONE,TWO,THREE;
    }

    ...
}

并在另一个档案中:

package com.stackoverflow;

import com.stackoverflow.A.MyEnum;

public class B {

  public void test(MyEnum mine) {
    ...
  }

  ...
}

答案 1 :(得分:3)

不 - 这是错的。 enum可以声明为静态内部类,并使用完全限定名称

进行引用
public class MyClass {
    public static enum MyEnum { BOOK, DVD }


    public void myMethod() {
        MyEnum e = MyEnum.DVD;
    }
}


public class B {
    public void someMethod() {
        MyClass.MyEnum enumVal = MyClass.MyEnum.BOOK;
    }
}

答案 2 :(得分:1)

还要记住,当你把enum放在另一个类的文件中时,你冒了风险 无法从另一个包访问枚举的问题 由于默认访问权限。 ......总是这样 明智地将枚举放在具有公共访问权限的单独文件中或作为 可以使用类访问的类的公共静态成员 名。

答案 3 :(得分:0)

您定义枚举的方式与定义类的方式相同 - 在自己的文件中,或者作为静态内部类(它们必须是静态的,不要绑定到它们的封闭类)。

在2个文件中定义你的枚举是坏的,因为它有点击败目的 - 你将有2个单独的枚举,虽然你想要在Enum.A上测试相等,你实际上会有Enum1.A! = Enum2.A。很混乱。

对他们来说,这并不是一个真正的谜,它只是一种定义常数的方法,比公共静态决赛更安全,更有能力。