Java 有没有其他解决办法?
如果输入等于cat,我的代码应该调用方法1;如果输入等于dog,我的代码应该调用方法2。为了实现这一点,我使用了if-else条件,但我很想知道是否可以用另一种方式实现,而不必在java中使用if、switch或hashmap函数。有人能提出解决办法吗Java 有没有其他解决办法?,java,Java,如果输入等于cat,我的代码应该调用方法1;如果输入等于dog,我的代码应该调用方法2。为了实现这一点,我使用了if-else条件,但我很想知道是否可以用另一种方式实现,而不必在java中使用if、switch或hashmap函数。有人能提出解决办法吗 if(input.equals("cat")) method1() else if(input.equals("dog")) method2() 看起来您正在寻找一些多态实现 通过枚举和功
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);
}
}
首先,如果您使用的是用户输入,那么您已经公开了所有的公共方法。您确实可以使用函数映射的开关。您的意思是
,如果,那么如果或者开关,有什么问题吗?“可能吗?”当然,你可以发挥创造力,想出更复杂的方法,但你为什么要这么做呢