2011-04-04 77 views
1

我正在開發一個依賴大量參數的XML文件的java框架。如何避免Java中的大if-else語句

當從XML文件讀取參數時,我必須有一個大的if-else語句來決定參數是什麼,然後調用適當的方法。 這是正常的嗎?有一個大的if-else語句?

我在想這樣做有一個簡單和整潔的方式,例如, Java XML映射或Java反射?這是答案嗎?如果是這樣,請你舉例說明這是如何完成的,所以我不必依賴大的if-else語句?

謝謝!

+0

換句話說,我怎麼能映射從我的XML文件的各種Java方法? – 2011-04-04 13:19:24

+1

你可以編輯你的答案,而不是評論它。 – 2011-04-04 13:21:02

+0

switch(parameter){case:...}? – Jaymz 2011-04-04 13:24:07

回答

2

有將JAXB映射到xml的JAXB(http://en.wikipedia.org/wiki/Java_Architecture_for_XML_Binding)。

但是你不能用它來映射方法:你只能將屬性映射到xml文件值(從xml反序列化參數)。

1

我推薦使用地圖,有參數的關鍵和XML條目值(不是整個XML)

+1

java 7還支持帶字符串參數的switch case – 2011-04-04 13:27:11

0

的反思將是一種方法。也許與目標方法上的自定義註釋相結合,以指示要傳遞給該方法的參數。不過,這是一種先進的技術。

更爲標準的技術是使用映射,其中鍵是屬性名稱,值是您定義的某個接口(如AttributeHandler)實現的實例。然後實現包含每個屬性的代碼。這涉及到編寫很多小類,但是可以將它們作爲匿名類來實現,以節省空間並保持代碼內聯。

0

一個大的if-else語句來決定什麼樣的參數,然後調用相應的方法

你也可以使用策略設計模式,每個參數的一個戰略目標,並使用地圖從要使用的策略對象的參數名稱。我發現這種方法對於即使是複雜的XML應用程序也很有用。

0

聽起來好像你想要一個數據驅動的基於規則的方法來編寫你的應用程序,而不是像你在XSLT中那樣。實現這一目標的一種方式是將其寫入XSLT而不是Java - XSLT畢竟是專門爲處理XML而設計的,而Java則不是。如果你不能這樣做,你可以研究XSLT如何使用規則和動作來實現它,並在Java代碼中模擬這種設計。

0

帶M個參數的N個函數總是可以用M + 1個參數的單個函數實現。

如果您需要一個大的if then else語句來決定要分派哪個方法,那麼您可以在您的方法中添加一個參數並調用單個方法。

您不應該需要if-then-else語句來綁定參數值。

如果存在依賴於特定參數值的複雜邏輯,則可以使用表驅動方法。可以將參數值的各種組合映射到等價類中,然後將variouos等價類組合映射到具有唯一標識的表中的一行中,然後根據該唯一標識生成一個switch語句。

3

您需要先創建一個接口:要創建地圖

public interface XMLParameterHandler { 
    public handle_parameter (String XMLData); 
} 

下一頁:

private Map<string, XMLParameterHandler> handlers; 

...並與相關Map實現一個初始化:

this.handlers = new HashMap<>(); 

您需要實現一些類的接口,一個用於e你打算處理的參數。這是內部類的一個很好的用法。插入這些實施handerls進入地圖:

handlers.put ("Param1", new XMLParam1HandlerImpl()); 
handlers.put ("Param2", new XMLParam2HandlerImpl()); 

然後就可以調用從XML處理循環的處理程序:

handlers.get (paramValue).handle_parameter(XmlData);