还有其他解决方案可以解决此问题吗?

时间:2020-07-13 16:52:25

标签: java

如果输入等于cat,则我的代码应调用方法1,如果输入等于dog,则应调用方法2。为了实现这一点,我使用了if else条件,但是我很想知道是否可以在不使用Java中使用if或switch或hashmap函数的情况下以其他方式实现。有人可以为此提出建议吗?

if(input.equals("cat")) 
   method1()
else if(input.equals("dog")) 
   method2()

2 个答案:

答案 0 :(得分:2)

似乎您正在寻找一些多态的实现。

通过枚举和功能接口是可行的:

select stuff(str, 1, len(str) - charindex('/', reverse(str)) + 1, '')

它将输出:

class MyClass {
    static void method1() {
        System.out.println("meow");
    }

    static void method2() {
        System.out.println("woof");
    }

    enum MyEnum {
        CAT(MyClass::method1),
        DOG(MyClass::method2);


        private MyEnum(Runnable method) {
            this.runnable = method;
        }

        private final Runnable runnable;

        public void act() {
            System.out.print(name() + ": ");
            this.runnable.run();
        }
    }

    public static void main(String[] args) {
        String[] inputs = {"cat", "dog" };
        for (String input : inputs) {
            MyEnum animal = MyEnum.valueOf(input.toUpperCase());
            animal.act();
        }
    }
}

但是无论如何,CAT: meow DOG: woof 的方法Enum is using a package-private map enumConstantDirectory都是通过名称来获取枚举值的。

valueOf

答案 1 :(得分:0)

为什么不使用反射?

import java.util.*;
import java.lang.*;
import java.io.*;
import java.lang.reflect.*;

class Ideone
{
    public static void cat(){
        System.out.println("meow");
    }
    
    public static void dog(){
        System.out.println("bark");
    }
    public static void main (String[] args) throws java.lang.Exception
    {
        Method m = Ideone.class.getDeclaredMethod("cat");
        m.invoke(Ideone.class);
        m = Ideone.class.getDeclaredMethod("dog");
        m.invoke(Ideone.class);
    }
}

对于入门者来说,它们是脆弱的,如果您使用的是用户输入,则只公开了每种公共方法。