在java中访问它定义的类之外的枚举我应该直接使用还是必须使用类名作为前缀?
答案 0 :(得分:2)
如果您导入它们,可以直接访问它们。否则,您需要使用封闭的类名作为限定符。
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
枚举。)
如果B.java位于不同的包中,则import A;
不需要import A.E;
。如果您需要在A
代码中使用(非限定)名称A
,则只需导入B
。
A
的子类当然会继承A.E
,因为E
是A
的成员;他们不需要任何导入就可以直接使用E
(如果授予访问权限)。
答案 1 :(得分: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);
}
}