【发布时间】:2015-11-25 17:29:02
【问题描述】:
我有一个基类,其中有两个派生类,它们似乎都使用相同的枚举。 我想在基类中使用枚举,但根据使用的派生类的实例更改分配的值。 我该怎么做?
基类:
public class Base {
private MyEnum data = MyEnum.Z;
public Base() {
}
public void baseMethod() {
System.out.println("base data:? "+MyEnum.X);
data = MyEnum.Y;
data.showVal();
System.out.println("base value:? "+data);
}
//enum yet to be added
protected enum MyEnum {
X(0,2),
Y(1,3),
Z(4,5);
private int a,b;
MyEnum(int x, int y) {
a=x;
b=y;
}
public void showVal() {
System.out.println("a="+a+",b="+b);
}
}
}
两个派生类:
public class A extends Base {
private MyEnum data = MyEnum.Z;
public A () {
}
public void firstMethod() {
System.out.println("A's DATA: "+MyEnum.X);
data = MyEnum.Y;
data.showVal();
System.out.println("A's value: "+data);
baseMethod();
}
protected enum MyEnum {
//values are different
X(10,11),
Y(12,13),
Z(14,15);
private int a,b;
MyEnum(int x, int y) {
a=x;
b=y;
}
public void showVal() {
System.out.println("a="+a+",b="+b);
}
}
}
public class B extends Base {
private MyEnum data = MyEnum.Z;
public B() {
}
public void secondMethod() {
System.out.println("B'S DATA: "+MyEnum.X);
data = MyEnum.Y;
data.showVal();
System.out.println("B's value: "+data);
baseMethod();
}
protected enum MyEnum {
//values are different
X(20,21),
Y(22,23),
Z(24,25);
private int a,b;
MyEnum(int x, int y) {
a=x;
b=y;
}
public void showVal() {
System.out.println("a="+a+",b="+b);
}
}
}
请帮忙。
【问题讨论】:
-
这段代码看起来错误的原因有很多,包括受保护的枚举覆盖、代码重复和奇怪的类扩展。你为什么不使用接口呢?您使用 Enums 有什么原因吗?
-
在 c++ 中,使用模板会很容易...所以,如果我理解正确,您希望 X、Y 和 Z 的值对于特定子类的每个实例都相同,但是不同的子类不同。好吧,枚举不是这项工作的正确工具。这听起来更像是你的类中需要静态字段
-
@GuillaumeF。这是现有代码,我想通过删除重复来优化它,但主要问题是枚举。另外,我需要整个枚举值 X 而不是单个数据。有什么办法可以优化吗?