[英]Java Reflection for creating new objects
有沒有一種方法可以使用Java Reflection創建原始數據類型變量?
例如,
public Object createObj(String type, String value){
if(type.compareTo("char") == 0)
//return a char
else if(type.compareTo("int") == 0)
//return an int
....
}
我在這里看到的常見用法是使用Class.forName()
。
public static Object makeNew(String type) throws Exception {
Class clazz = Class.forName(type);
return clazz.newInstance();
}
對於int
, char
您必須使用它們各自的類類型的名稱,實際上不能創建基元。 分別是“ java.lang.Integer”,“ java.lang.Character”等。 如果要傳遞“ int”,“ char”等,則需要特別檢查。
添加“值”作為字符串要困難得多。 大多數類都無法將字符串更改為初始狀態。 您絕對必須對原語進行特殊處理以提供初始值。 總體而言,我認為這不是解決您要解決的任何問題的好方法。
因此,您在評論中提到了使用setter方法。 一個問題是如何確定要呼叫哪個二傳手? 如果為JButton
傳遞參數“ 10”,則是setAlignmentX
, setAlignmentY
還是setText
方法?
此時,您必須全力以赴。
<class>
<name>javax.swing.JButton</name>
<set><method>setAlignmentX</method><value>10</value></set>
</class>
現在,您遇到了一些設置器將其他類用作參數的問題。 而且有些類是不可變的( Integer
和Character
是),它們根本沒有設置器,您必須調用ctor。
您基本上是在這里進行序列化的(這是一個非常困難的問題)。 看一下XmlEncoder
和XmlDecoder
,它們所做的事情接近您想要的。 https://docs.oracle.com/javase/8/docs/api/java/beans/XMLEncoder.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.