簡體   English   中英

使用反射:java.reflection.Constructor.newInstance()

[英]Using Reflection: java.reflection.Constructor.newInstance()

我正在嘗試使用 Constructor.newInstance() 方法實例化 class 但在為構造函數正確提供參數時遇到了麻煩。 問題是,構造函數參數以 String[] 數組的形式提供,我必須將其元素轉換為相應的類型。 這適用於對象,但如果某些參數是原始類型怎么辦?

這是一個簡化的示例(在我遇到原始類型之前似乎可以正常工作):

Class fooClass = Class.forName("Foo");
Constructor[] fooCtrs = fooClass.getConstructors();
Class[] types = fooCtrs[0].getParameterTypes();
Object[] params = new Object[types.length];

for(int i = 0; i < types.length; i++) {
    params[i] = types[i].cast(args[i]);  // Assume args is of type String[]
}

一旦我遇到一個 int 或其他東西,我就會得到一個 ClassCastException。 我做錯什么了嗎? 我是否需要手動包裝我遇到的任何原語,或者是否有內置的方法?

正確,您需要在包裝器中添加原語。

閱讀Constructor.newInstance()文檔中的原語

參數: initargs - 要作為 arguments 傳遞給構造函數調用的對象數組; 原始類型的值被包裝在適當類型的包裝器 object 中(例如,浮點數中的浮點數)

args[i]可能無法轉換為所需的類型。

就像你有 list "foo"並且type[i].cast()期待int

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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