以下枚举结构执行某些操作,而与客户端类无关(出于封装原因)

    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/

10-13 21:28