我在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);
答案 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");
感谢彼得......:)