0

我在 HashMap 中存储了一些类名。当用户提供名称时,该特定类应该运行。我怎样才能做到这一点?请提供任何帮助。

我确实喜欢下面,但我得到类未发现异常。

Map<String,String> ruleMap = new HashMap<String, String>();

    ruleMap.put("1", "CalculatorTest");
    ruleMap.put("2", "AreaTest")
JUnitCore junit = new JUnitCore();

调用方法是,

for (Map.Entry<String, String> entry : ruleMap.entrySet()) 

    {
        Class c = null;

        if(selection.equals(entry.getKey()))
        {
            try 
            {
                c = Class.forName(entry.getValue());
            } 
            catch (Exception e) 
            {
                e.printStackTrace();
            }
            junit.run(c); 
            break;
        }
    }

当我像下面这样打电话时,它工作正常。

junit.run(CalculatorTest.class); 
4

3 回答 3

0

使用完全限定的类名而不是简单的类名!

尝试使用:

ruleMap.put("1", CalculatorTest.class.getName());
ruleMap.put("2", AreaTest.class.getName());

问候

于 2012-07-23T11:25:33.767 回答
0

junit.run(CalculatorTest.class); 表示 junit.run(Package.CalculatorTest );

所以 junit.run(c) 不起作用。

例如 ,

包 cocat.test.kmt;

public static void main(String args[]) throws ClassNotFoundException {
    String test =String.valueOf(Class.forName("cocat.test.kmt.Concat"));
  System.out.println(test);
}

运行此代码时,显示以下结果,

类 cocat.test.kmt.Concat

于 2012-07-23T11:39:00.683 回答
0

正如 Peter Rader 和 Peter Lawrey 所评论的那样, Class.forName() 将采用该类的全名。就我而言,我的代码应该是,

ruleMap.put("1", "package.CalculatorTest"); 

感谢彼得的... :)

于 2012-07-24T06:34:55.857 回答