如何运行从String转换的类?

时间:2012-07-23 11:18:24

标签: java string class junit4

我在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); 

3 个答案:

答案 0 :(得分:0)

使用full-qualified-classnames而不是简单的类名!

尝试使用:

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

此致

答案 1 :(得分:0)

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

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

例如,

package 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);
}

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

class cocat.test.kmt.Concat

答案 2 :(得分:0)

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

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

感谢彼得......:)