1

リフレクションを使用してメソッドを呼び出そうとしています

Method mi = TestInterface.class.getMethod("TestMethod", java.lang.String.class,java.lang.String.class,java.lang.String.class,java.lang.Object[].class);

このメソッドには3つの必須の文字列引数があり、変数引数である最後の引数はオプションです。

ただし、このメソッドを次のように呼び出すと。

mi.invoke(new TestImplementation(), new Object[]{"arg1", "arg2","arg3"});

それからそれは私にエラーを与えますjava.lang.IllegalArgumentException: wrong number of arguments

しかし、最後の議論はオプションである必要がありますか?または、リフレクションを使用してメソッドを呼び出す場合、これは機能しませんか?

コード:

public interface TestInterface {
    public void TestMethod(String str, String str1, String str2, Object... objects);
} 

public class TestImplementation implements TestInterface {
    public void TestMethod(String str1, String str2, String str3, Object... objects) {
        // ....
    }
}

public static void main(String[] args) throws Exception { 
    // works perfectly
    TestInterface obj = new TestImplementation();
    obj.TestMethod("str", "str1", "str2");
    // doesn't work
    Method mi = TestInterface.class.getMethod("TestMethod", java.lang.String.class, java.lang.String.class,
            java.lang.String.class);
    mi.invoke(new TestImplementation(), new Object[] { "arg1", "arg2", "arg3" });
}

前もって感謝します

4

1 に答える 1