1

在java中访问它定义的类之外的枚举我应该直接使用还是必须使用类名作为前缀?

4

2 回答 2

4

如果您导入它们,您可以直接访问它们。否则,您需要使用封闭的类名作为限定符。

A.java:

class A {
    enum E { . . . }
    . . .
}

B.java(本例中与 A.java 相同的包):

import A.E;
class B {
    E eThing;     // works because A.E was imported
    A.E eThing2;  // always works provided A is known (in same package here)
    . . .
}

当然,这个答案并没有解决仍然适用的可访问性规则问题。(例如,您不能private从另一个类访问枚举。)

import A;如果 B.java 在不同的包中,那么你不需要import A.E;. 如果您需要在's 的代码A中使用(非限定)名称,您只需要导入。AB

的子类A当然会继承,A.E因为E它是 ; 的成员A。他们不需要任何导入即可E直接使用(如果授予访问权限)。

于 2013-06-06T02:28:52.913 回答
2

像类一样单独声明枚举

public enum MyEnum{
    SOMETHING
}

这是访问的另一个类。

 public class AnotherClass{
        ..
        public void someMethod(){
            Sysout(MyEnum.SOMETHING);
        }
    }

如果您进行静态导入,您可以使用枚举实例的名称访问;

import static MyEnum.SOMETHING

public class MyClass{

public void method(){
 SOMETHING.name();
}
}

这里有另一种可能性,比如内部类

  public class EnumHolder{
        public enum MyEnum{
            ENUM_INSTANCE
        }  

    }

并且外部类可以访问这里引用classHolder,然后是枚举

public class OutsiderClass{

    public void method(){
        Sysout(EnumHolder.MyEnum.ENUM_INSTANCE);
    }

}
于 2013-06-06T02:30:22.923 回答