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 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog