首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将方法从枚举链接到客户端类的成员变量

将方法从枚举链接到客户端类的成员变量
EN

Stack Overflow用户
提问于 2009-09-09 03:21:47
回答 1查看 362关注 0票数 0

以下枚举结构执行某些操作,同时对客户端类保持不可知(由于封装原因)

代码语言:javascript
复制
    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
    }

客户端类

代码语言:javascript
复制
    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()的具体实现,以便它们能够对客户端类成员varY进行操作,而MyEnum.B和MyEnum.D的method1()实现只对客户类成员变量varX进行操作。

例如,在main()方法中:

代码语言:javascript
复制
Client aClient = new Client(aVarX, aVarY, anEnum);    
aClient.performMethod1(aClient.getEnum());

因此,根据当前枚举状态,上述语句只应在varX或varY上操作,并在aClient上更改状态。

比方说:

代码语言:javascript
复制
aClient.performMethod1(MyEnum.A);

应将由aClient表示的varY状态更改为varY+2。varX应该保持不变。

从简单的命名约定可以看出,此时varX在MyEnum中没有以任何方式链接到客户端类中的varX。我的想法倾向于变量的类型。由于我使用的是原语(int),所以无法区分。

您会建议我为每个varX和varY创建不同的自定义类型(以某种方式包装它们吗?)在客户类?

我希望我在这个问题上不要过于冗长。如果我对此不清楚,请告诉我。非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2009-09-09 05:31:19

根据Client的不同值,您希望在MyEnum上发生不同的事情。如果MyEnum必须与客户端无关,那么Client将不得不识别MyEnum的不同状态(Client.performMethod1中的一个开关),或者一个单独的处理器类将实现该逻辑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1397388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档