从枚举访问超类变量
Accessing superclass variables from an enum
是否有任何方法可以从枚举本身设置枚举 parent/superclass 中保存的变量? (以下未编译,但说明了我试图实现的目标)......
class MyClass{
ObjectType type;
String someValue;
public void setType(ObjectType thisType){
type = thisType;
}
enum ObjectType {
ball{
@Override
public void setValue(){
someValue = "This is a ball"; //Some value isn't accessible from here
}
},
bat{
@Override
public void setValue(){
someValue = "This is a bat"; //Some value isn't accessible from here
}
},
net{
@Override
public void setValue(){
someValue = "This is a net"; //Some value isn't accessible from here
}
};
public abstract void setValue();
}
}
然后,像这样:
MyClass myObject = new MyClass();
myObject.setType(ObjectType.ball);
完成上述操作后,myObject 的 'someValue' 字符串现在应设置为 'This is a ball'。
有什么办法吗?
嵌套的 enum
类型是隐式静态的(参见 Are java enum variables static?)。这包括声明为内部 classes 的 enum
类型,因此它们无法访问外部 class.
的实例字段
您不能用 enum
做您想做的事情,您必须将其建模为正常的 class。
如果您希望 MyClass.someValue 等于枚举的 someValue,您可以执行以下操作,但是由于可以从枚举中检索 someValue,所以我根本不会在 MyClass 上使用 someValue,只是需要时从枚举中检索它
public class MyClass {
ObjectType type;
String someValue;
public void setType(ObjectType thisType) {
this.type = thisType;
this.someValue = thisType.getSomeValue();
}
enum ObjectType {
ball ("This is a ball"),
bat ("This is a bat"),
net ("This is a net");
private final String someValue;
ObjectType(String someValue) {
this.someValue = someValue;
}
public String getSomeValue() {
return someValue;
}
}
}
是否有任何方法可以从枚举本身设置枚举 parent/superclass 中保存的变量? (以下未编译,但说明了我试图实现的目标)......
class MyClass{
ObjectType type;
String someValue;
public void setType(ObjectType thisType){
type = thisType;
}
enum ObjectType {
ball{
@Override
public void setValue(){
someValue = "This is a ball"; //Some value isn't accessible from here
}
},
bat{
@Override
public void setValue(){
someValue = "This is a bat"; //Some value isn't accessible from here
}
},
net{
@Override
public void setValue(){
someValue = "This is a net"; //Some value isn't accessible from here
}
};
public abstract void setValue();
}
}
然后,像这样:
MyClass myObject = new MyClass();
myObject.setType(ObjectType.ball);
完成上述操作后,myObject 的 'someValue' 字符串现在应设置为 'This is a ball'。
有什么办法吗?
嵌套的 enum
类型是隐式静态的(参见 Are java enum variables static?)。这包括声明为内部 classes 的 enum
类型,因此它们无法访问外部 class.
您不能用 enum
做您想做的事情,您必须将其建模为正常的 class。
如果您希望 MyClass.someValue 等于枚举的 someValue,您可以执行以下操作,但是由于可以从枚举中检索 someValue,所以我根本不会在 MyClass 上使用 someValue,只是需要时从枚举中检索它
public class MyClass {
ObjectType type;
String someValue;
public void setType(ObjectType thisType) {
this.type = thisType;
this.someValue = thisType.getSomeValue();
}
enum ObjectType {
ball ("This is a ball"),
bat ("This is a bat"),
net ("This is a net");
private final String someValue;
ObjectType(String someValue) {
this.someValue = someValue;
}
public String getSomeValue() {
return someValue;
}
}
}