tank2140896 2013-05-09 18:56
浏览 235
已采纳

如何调用反射的到的类名

新建个项目,建个包叫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
小弟求教,改怎么做?

  • 写回答

1条回答 默认 最新

  • clxy大叔 2013-05-10 09:54
    关注

    [code="java"]
    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("输入错误");
        }
    

    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?