簡體   English   中英

Java Reflection用於創建新對象

[英]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();
}

對於intchar您必須使用它們各自的類類型的名稱,實際上不能創建基元。 分別是“ java.lang.Integer”,“ java.lang.Character”等。 如果要傳遞“ int”,“ char”等,則需要特別檢查。

添加“值”作為字符串要困難得多。 大多數類都無法將字符串更改為初始狀態。 您絕對必須對原語進行特殊處理以提供初始值。 總體而言,我認為這不是解決您要解決的任何問題的好方法。


因此,您在評論中提到了使用setter方法。 一個問題是如何確定要呼叫哪個二傳手? 如果為JButton傳遞參數“ 10”,則是setAlignmentXsetAlignmentY還是setText方法?

此時,您必須全力以赴。

<class>
  <name>javax.swing.JButton</name>
  <set><method>setAlignmentX</method><value>10</value></set>
</class>

現在,您遇到了一些設置器將其他類用作參數的問題。 而且有些類是不可變的( IntegerCharacter是),它們根本沒有設置器,您必須調用ctor。

您基本上是在這里進行序列化的(這是一個非常困難的問題)。 看一下XmlEncoderXmlDecoder ,它們所做的事情接近您想要的。 https://docs.oracle.com/javase/8/docs/api/java/beans/XMLEncoder.html

暫無
暫無

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

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