[英]How do I reflectively invoke a method with null as argument?
我試圖反射性地調用 Java 中的這個方法:
public void setFoo(ArrayList<String> foo) { this.foo = foo; }
問題是我想將 null 作為null
傳遞,這樣 foo 就變成了 null。
但是,在以下方法中,它假定沒有 arguments,並且我得到IllegalArgumentException
( wrong number of arguments
):
method.invoke(new FooHolder(), null);
// -----------------------------^ - I want null to be passed to the method...
這是如何實現的?
嘗試
method.invoke(new FooHolder(), new Object[]{ null });
對我來說,這不起作用:
m.invoke ( c.newInstance(), new Object[] { null } );
但這有效:
m.invoke ( c.newInstance(), new Object[] { } );
編譯器警告應該讓你意識到這個問題;
類型 null 的參數應顯式轉換為 Object[],以便從類型 Method 調用可變參數方法 invoke(Object, Object...)。 它也可以轉換為 Object 以進行可變參數調用
你可以這樣修復它;
Object arg = null;
method.invoke(new FooHolder(), arg);
對已發布的解決方案的一些解釋。
Method.invoke()
聲明為變量 arity function,這意味着通常您不需要顯式創建 object 數組。 僅僅因為你傳遞了一個參數,它可以被解釋為一個 object 數組本身,所以 method.invoke method.invoke( obj, null)
失敗了。
例如,如果您的方法有兩個參數, method.invoke( obj, null, null)
將工作得很好。
但是,如果您的方法只有一個Object[]
參數,則始終必須將其包裝起來。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.