新建个项目,建个包叫mytest,以下所有代码都在该包下
1、Function.java
[code="java"]
package 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+",该字母可以在程序中找到");
}
}
[/code]
2、Test.java
[code="java"]
package 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或functionc
System.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("输入错误");
}
}
}
[/code]
问题就如在Test.java里注释那里写的,再重复下:有没有什么办法使得只要类似这么写:Function.(mo.getName())(c);就可以省去下面的switch分支,而达到switch分支一样的效果,就可以让这里的mo.getName()动态替换functiona或functionb或functionc
小弟求教,改怎么做?