簡體   English   中英

java:使用變量的值作為對象名稱(不是eval()方式)

[英]java: using a variable's value as an object name (not the eval() way)

好的,因此,我來​​自一個以Perl為主的背景,並且主要是寫一些骯臟的小應用程序來自動化我的任務,因此,我已經閱讀了有關eval()弊端的頁面,並且我總是在perl中使用哈希。 我目前正在做一個小項目(主要是給我和其他幾個工作中的技術人員),用於創建“罐頭響應”電子郵件。 為了允許增加,減少,編輯等,我想本質上以XML描述響應形式,並讓我的應用程序解析XML並在運行時創建響應形式。 我想使用Java(將其集成到我創建的現有Java工具中),並歸納為一個簡單的示例,我想要做的就是采用一些XML,例如:

<Form Name="first" Title="Title!">
  <Label Name="before">Your Request:</Label>
  <Textbox Name="input"/>
  <Label Name="after">has been completed.</Label>
  <Output>%before%%input%%after%</Output>
</Form>
<Form Name="second">
...

然后從解析開始,我想創建一個名為JFrame的JFrame,它包含一個以明顯的文本命名為before的JLabel,然后是一個文本框,然后是另一個JLabel ...您明白了(我最終想使用輸出標簽來控制准確地格式化響應)。

我可以解析XML,並獲取元素名稱等,但是我不知道如何有效地使用作為變量值的名稱實例化對象:

JFrame $(thisNode.getAttributes().getNamedItem("Name").getNodeValue()) = new JFrame(thisNode.getAttributes().getNamedItem("Title").getNodeValue());

我基本上已經閱讀了有關Java反射的Google搜索結果的整個第一頁,但是我沒有遇到任何正在做我所尋找的事情(至少不是我能說的)。 有了反射的經驗基本上為零,我很好奇這是否可以使用反射實現,還是我應該采用與Perl中相同的方法,並創建一個HashMap或HashTable of Objects,並將它們綁定到JFrame哈希中的條目。 或者,我對不屬於這兩類的想法持開放態度。 哈希是我的備用答案,因為我已經在Perl中做過很多次了,而且我確定我可以使其在Java中工作,但是如果有一個功能(如反射)可以做到這一點任務,那么為什么不按照預期的方式去做呢?

您要的內容在Java中是不可能的。 這種方式行不通,動態語言中常見的這些技巧不是Java方式。 您當然可以:

JFrame frame = JFrameBuilder.buildFromTemplate("frame.xml");

在這里創建一個JFrameBuilder類,該類讀取XML並從中創建一個對象,但變量名不能是動態的。 您必須記住,Java有兩個步驟。

  1. Java源文件被編譯成字節碼;
  2. 字節碼由Java解釋器(JVM)讀取並執行。

您實際上想要的是在步驟(1)中要求執行代碼。 現在,批注可以在編譯步驟中完成(例如添加接口,實現方法等),但是局部變量命名不是其中之一。

您可以(不一定要這樣做)基於XML生成Java源代碼,編譯生成的代碼,最后執行編譯后的代碼。 如果您保存生成的.class文件並重用它們,而不是在每次運行程序時都對XML進行解析(這樣可以檢查XML的時間戳,並且僅在上次代碼生成后對其進行了修改,則僅生成和編譯),這樣可能會更有效。 )。

暫無
暫無

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

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