Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有其他解决办法?_Java - Fatal编程技术网

Java 有没有其他解决办法?

Java 有没有其他解决办法?,java,Java,如果输入等于cat,我的代码应该调用方法1;如果输入等于dog,我的代码应该调用方法2。为了实现这一点,我使用了if-else条件,但我很想知道是否可以用另一种方式实现,而不必在java中使用if、switch或hashmap函数。有人能提出解决办法吗 if(input.equals("cat")) method1() else if(input.equals("dog")) method2() 看起来您正在寻找一些多态实现 通过枚举和功

如果输入等于cat,我的代码应该调用方法1;如果输入等于dog,我的代码应该调用方法2。为了实现这一点,我使用了if-else条件,但我很想知道是否可以用另一种方式实现,而不必在java中使用if、switch或hashmap函数。有人能提出解决办法吗

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

看起来您正在寻找一些多态实现

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

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
的方法
valueOf
来通过名称获取Enum值

public static <T extends Enum<T>> T valueOf(Class<T> enumType,
                                                String name) {
        T result = enumType.enumConstantDirectory().get(name);
// ...
}
公共静态T值(类枚举类型,
字符串名称){
T result=enumType.enumConstantDirectory().get(名称);
// ...
}

为什么不使用反射

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);
    }
}

首先,如果您使用的是用户输入,那么您已经公开了所有的公共方法。

您确实可以使用函数映射的开关。您的意思是
,如果
,那么
如果
或者
开关
,有什么问题吗?“可能吗?”当然,你可以发挥创造力,想出更复杂的方法,但你为什么要这么做呢