以下枚举结构执行某些操作,而与客户端类无关(出于封装原因)
public enum MyEnum implements Commands{
A{
public int method1(int varY) {
return varY+2;
}
public MyEnum method2(){
return MyEnum.B;
}
//...other methods implementing Commands interface
},
B{
public int method1(int varX) {
return varX-2;
}
public MyEnum method2(){
return MyEnum.C;
}
//...other methods implementing Commands interface
},
C{
public int method1(int varY) {
return varY-2;
}
public MyEnum method2(){
return MyEnum.D;
}
//...other methods implementing Commands interface
},
D{
public int method1(int varX) {
return varX+2;
}
public MyEnum method2(){
return MyEnum.A;
}
//...other methods implementing Commands interface
}
客户班
public class Client {
private int varX;
private int varY;
private MyEnum enum;
MyEnum getEnum(){
return enum;
}
int varX(){
return varX;
}
int getVarY(){
return varY;
}
public Client(int varX, int varY, MyEnum enum){
this.varX = varX;
this.varY = varY;
this.enum = enum;
}
public void performMethod1(MyEnum enum){
varX = getEnum().method1(getVarX()); //???
varY = getEnum().method1(getVarY()); //???
}
public void performMethod2(...){
enum = getEnum().method2();
}
}
我的问题是如何链接属于MyEnum.A和MyEnum.C的method1()的特定实现,以便它们可对Client类成员varY进行操作,而将MyEnum.B和MyEnum.D的method1()实施仅对客户端类成员变量varX。
例如在main()方法中:
Client aClient = new Client(aVarX, aVarY, anEnum);
aClient.performMethod1(aClient.getEnum());
因此,根据当前的枚举状态,以上语句应仅在varX或varY上运行,并更改aClient上的状态。
让我们说:
aClient.performMethod1(MyEnum.A);
varY表示的aClient的状态应更改为varY + 2。 varX应该保持不变。
正如您通过简单的命名约定所看到的,此时MyEnum中的varX没有以任何方式链接到Client类中的varX。我的想法倾向于变量的类型。由于我正在使用基元(int),因此无法区分。
您是否建议我为Client类中的每个varX和varY创建不同的自定义类型(以某种方式包装?)?
我希望我对这个问题不要太冗长。如果我不清楚,请告诉我。非常感谢。
最佳答案
您希望Client
发生不同的变化,具体取决于MyEnum
的值。如果MyEnum
必须与客户端无关,则Client
将不得不识别MyEnum
的不同状态(Client.performMethod1
中的开关),或者单独的处理器类将实现该逻辑。
关于java - 将方法从枚举链接到客户端类的成员变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1397388/