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 に答える