2 sinat 33415638 sinat_33415638 于 2016.03.14 14:03 提问

我想输进来“1”,就执行a1方法,输进来“2”,就执行a2方法,怎么弄?根据方法名做判断

我想输进来“1”,就执行a1方法,输进来“2”,就执行a2方法,怎么弄?根据方法名做判断
有很多个这样的方法,不想一个一个写

9个回答

leilba
leilba   Rxr 2016.03.14 14:44

不嫌麻烦的话用反射可以实现你所需要的效果:

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;

public class Test {

    public void a1() {
        System.out.println("a1");
    }

    public void a2() {
        System.out.println("a2");
    }

    public void ax() {
        System.out.println("ax");
    }

    // 根据传入的名字来执行方法
    public static void executeMethode(String methodeName) throws NoSuchFieldException, NoSuchMethodException,IllegalAccessException, InvocationTargetException{
        Test test = new Test();

        Class testClass = Test.class;

        Method method = testClass.getDeclaredMethod("a"+methodeName);

        method.invoke(test);
    }

    public static void main(String []args) throws NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException{

        executeMethode("1");
    }
}

MCtime
MCtime   2016.03.14 14:08

str.contains("");

MCtime
MCtime 回复sinat_33415638: 用switch,不嫌麻烦就拼if else 楼下的都差不多
接近 2 年之前 回复
sinat_33415638
sinat_33415638 我想根据方法名字做判断啊,输进来“x”,就执行ax()方法
接近 2 年之前 回复
u012768347
u012768347   2016.03.14 14:12

如果函数签名不一样可以用重载,也可以用switch判断输入数字,执行不同方法

qq_34284605
qq_34284605   2016.03.14 14:13

switch str.contains("")
case 1
case 2

enpterexpress
enpterexpress   2016.03.14 14:19
 switch(expression){
    case constant-expression  :
       statement(s);
       break; // 可选的
    case constant-expression  :
       statement(s);
       break; // 可选的

    // 您可以有任意数量的 case 语句
    default : // 可选的
       statement(s);
}
deltatang
deltatang   2016.03.14 14:44

从设计结构上找原因,问题不在于你的设想实现不了,而是在于你的设计模式。

tmgfdzh
tmgfdzh   2016.03.14 15:34

可以查看JAVA的反射机制

u013829202
u013829202   Rxr 2016.03.14 16:35

感觉你应该是初学者,用switch比较好。 深入点用设计模式,反射。

cmmchenmm
cmmchenmm   2016.03.14 16:36

int a=in.nextint;
if(a==1){
do a1;
}
else if(a==2){
do a2;
}

是这样?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!