簡體   English   中英

如何以 null 作為參數以反射方式調用方法?

[英]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,並且我得到IllegalArgumentExceptionwrong 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM