Java - 避免静态函数的switch语句

jul*_*ian 6 java oop polymorphism switch-statement

看看这段代码 -

switch(kind) {
     case "green" :
           GreenKind.doSomething(); // Static function
     break;
     case "white" :
           WhiteKind.doSomething(); // Static function
     break;
     case "blue" :
           BlueKind.doSomething(); // Static function
     break;
     case "yellow" :
           YellowKind.doSomething(); // Static function
     break;
}
Run Code Online (Sandbox Code Playgroud)

有一种方法可以避免switch语句吗?因为它闻起来很糟糕.

也许像这样的人? -

kinds.get(kind).doSomething();
Run Code Online (Sandbox Code Playgroud)

我的解决方案的问题是函数是静态的,我无法实现具有静态函数的接口.如果你不明白为什么我写接口,因为我想在我的解决方案中使用多态.

Roh*_*ain 15

我会enum这样:

enum Kind {
    GREEN {
        @Override
        public void doSomething() {
            GreenKind.doSomething();
        }
    },
    WHITE {
        @Override
        public void doSomething() {
            WhiteKind.doSomething();
        }
    };

    public abstract void doSomething();
}
Run Code Online (Sandbox Code Playgroud)

并传递一个枚举常量,例如这个方法:

public static void invoke(Kind kind) {
    kind.doSomething();
}
Run Code Online (Sandbox Code Playgroud)

并称之为:

invoke(Kind.GREEN);
Run Code Online (Sandbox Code Playgroud)

这种方式看起来更干净,而且更安全,因为您只能拥有一组固定的输入.