2014-01-15 33 views
1

我要解釋我的問題很清楚使用不同類作爲參數,我可以:)如何在方法

我使用web服務的jar文件。在這個jar文件中,我將使用不同的類。每個類都爲一年:

  • 2012有一個類名爲Service12
  • 2013有一個類名爲Service13
  • 2014有一個名字叫service14

等等。

這些類僅用於使用,我無法更改此jar文件中的任何內容。

我會用類關於每年在一個Web服務,但不能與if-else,因爲它是超過20年的服務方式:

public myObj methodA (int year){ 
    ServiceXX serviceXX = myWebService.useThisService(ServiceXX.class); 
} 

而且爲MyWebService有這樣一個泛型方法:

public <T> T useThisService(Class<T> serviceClass) {   
    return (T) this.getService(serviceClass); 
} 

我如何可以編寫這樣了methodA沒有任何if-else我可以正確的用戶ServiceXX每個

希望它已經足夠清楚地獲得幫助。

+1

你可以創建一個'interface'並擴展你所有的'''類,然後你可以通過'interface'引用; – eatSleepCode

+0

'switch'是'if-else'的好選擇,但是第一個註釋是更好的選擇。 –

+0

@eatSleepCode:正如我所提到的那樣,我不能做那樣的事情,因爲類att只使用並且來自我使用它們的jar文件。 Kishan Sarsecha Gajjar:開關和if-else不是真的我會。此代碼將來可能會更復雜,我需要更穩定的代碼和更少的風險來重構此代碼。 – Sheri

回答

5

您能使用myWebService.useThisService(Class.forName("Service" + year));嗎?

+0

其實不......這個名字可以在將來改變,不要遵循今天的模式。 – Sheri

+0

@Shari如果您可以「預測未來」,那麼您可以捕獲「ClassNotFoundException」並嘗試使用不同的命名模式。如果你無法預測未來,並且你不知道下一個命名模式可能是什麼,那麼今天你不可能這樣做(敏捷實踐者可能會說它甚至不值得),或者你可以提前計劃添加更多使用配置文件來配置可能的模式和[SimpleDateFormat](http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html)以生成可能的名稱巧妙 –

+0

謝謝Raffaele。我決定了敏捷的思維方式。今天使用最好的解決方案,並在將來需要時進行更改。 – Sheri