Java 从现有枚举//枚举别名生成内部枚举
存在一个枚举Java 从现有枚举//枚举别名生成内部枚举,java,Java,存在一个枚举 公共枚举方向{ 左边 正确的 } 我可以通过Direction.LEFT访问它,我也想通过myObject.Direction.LEFT访问它: 公共类MyClass{ 公共???方向=???; } MyClass myObject=新的MyClass(); 断言myObject.direction.LEFT==direction.LEFT; 我怎样才能像上面那样给一个枚举加上别名,就好像它是一个嵌套的内部枚举一样 (我希望这样做的原因是,我可以通过GraalVM中的宿主对象m
公共枚举方向{
左边
正确的
}
我可以通过Direction.LEFT
访问它,我也想通过myObject.Direction.LEFT
访问它:
公共类MyClass{
公共???方向=???;
}
MyClass myObject=新的MyClass();
断言myObject.direction.LEFT==direction.LEFT;
我怎样才能像上面那样给一个枚举加上别名,就好像它是一个嵌套的内部枚举一样
(我希望这样做的原因是,我可以通过GraalVM中的宿主对象
myObject
将方向传递到IL的环境)严格来说,你不能这样做。在Java中,您不能“引用”或别名这样的类型
您试图做的事情似乎很像使用常量。我不知道您为什么要这样做,但这里有一个版本在第三类中使用final属性:
public static class MyClass {
public DirectionHolder direction = new DirectionHolder();
public static class DirectionHolder {
public final Direction LEFT = Direction.LEFT;
public final Direction Right = Direction.RIGHT;
}
}
这将使您的myObject.direction.LEFT==direction.LEFT代码>代码编译并运行,但它有局限性。除此之外,DirectionHolder
需要进行维护,以便它与方向保持同步
您可以在不做任何特殊操作的情况下执行此操作:
public class MyClass {
public Direction direction;
}
您将能够访问myObject.direction.LEFT
,它将引用与direction.LEFT
完全相同的对象
这是因为每个枚举常量都是静态的final字段(),并且
但是,如果此方向
字段的唯一目的是为方向.LEFT
和方向.RIGHT
创建别名,则会非常混乱,因为字段的目的是存储数据
如何为枚举设置别名
不能对整个枚举进行别名,但可以单独对每个值进行别名,我不推荐这样做
public static final Direction LEFT=Direction.LEFT;
公共静态最终方向右侧=Direction.RIGHT;
由于MyClass.LEFT
和Direction.LEFT
都是指同一个对象,所以对枚举使用=
的常用功能仍然有效,即MyClass.LEFT==Direction.LEFT
是真的。这对我来说没有任何意义。对我来说也没有意义。断言myObject.direction==direction.LEFT要合理得多代码>这是如何工作的?我很惊讶它在没有任何赋值的情况下工作,为什么不像大多数其他类型那样myObject.direction
只是null
LEFT
是一个静态字段。我是否可以去掉方向。LEFT.right.LEFT.right.right
是有效的,并且与方向.right
完全相同?@theonlygusti是的,因为静态字段是如何工作的,但我建议你永远不要写这样的东西,因为它非常混乱。实际上我得到了一个错误无法读取null的属性'LEFT'