如果输入等于cat,则我的代码应调用方法1,如果输入等于dog,则应调用方法2。为了实现这一点,我使用了if else条件,但是我很想知道是否可以在不使用Java中使用if或switch或hashmap函数的情况下以其他方式实现。有人可以为此提出建议吗?
if(input.equals("cat"))
method1()
else if(input.equals("dog"))
method2()
答案 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);
}
}
对于入门者来说,它们是脆弱的,如果您使用的是用户输入,则只公开了每种公共方法。