问题描述
新建个项目,建个包叫mytest,以下所有代码都在该包下1、Function.javapackage mytest;public class Function {public static void functiona(char c){System.out.println("你输入的是:"+c+",该字母可以在程序中找到");}public static void functionb(char c){System.out.println("你输入的是:"+c+",该字母可以在程序中找到");}public static void functionc(char c){System.out.println("你输入的是:"+c+",该字母可以在程序中找到");}}2、Test.javapackage mytest;import java.lang.reflect.Method;import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner s = new Scanner(System.in);System.out.println("请输入一个字母");char c = s.nextLine().charAt(0);/*try {//包名.类名Class cls = Class.forName("mytest.Function");System.out.println("类加载成功");Method m[] = cls.getDeclaredMethods();String p = "\w+"+c;for(Method mo:m){//System.out.println(mo.getName());if(mo.getName().matches(p)){//有没有什么办法使得只要类似这么写:Function.(mo.getName())(c);//就可以省去下面的switch分支,而达到switch分支一样的效果//这里的mo.getName()就可以动态替换functiona或functionb或functioncSystem.out.println("YES");}else{System.out.println("NO");}}} catch (ClassNotFoundException e) {System.out.println("类加载错误");e.printStackTrace();}*//** * switch分支 */switch(c){case 'a':Function.functiona(c);break;case 'b':Function.functionb(c);break;case 'c':Function.functionc(c);break;default:System.out.println("输入错误");}}}问题就如在Test.java里注释那里写的,再重复下:有没有什么办法使得只要类似这么写:Function.(mo.getName())(c);就可以省去下面的switch分支,而达到switch分支一样的效果,就可以让这里的mo.getName()动态替换functiona或functionb或functionc小弟求教,改怎么做?
解决方案
Scanner s = new Scanner(System.in);System.out.println("请输入一个字母");char c = s.nextLine().charAt(0);try {Method m = Function.class.getMethod("function" + c, char.class);m.invoke(null, c);} catch (NoSuchMethodException e) {System.out.println("输入错误");}