我正在開發一個java應用程序,在我們收到xml的時候,xml包含來自全球很多地區的一些數據。所以xml看起來像這樣從屬性文件加載編譯時間常量
<Shipment>
<Region>
<name>China</name>
<calculatedValue>0.001</calculatedValue>
<deviation>-1<deviation>
</Region>
<Region>
<name>Russia</name>
<calculatedValue>0.091</calculatedValue>
<deviation>-1<deviation>
</Region>
<Region>
<name>UK</name>
<calculatedValue>2.001</calculatedValue>
<deviation>-12<deviation>
</Region>
// lots of other regions //
</Shipment>
我們有一個叫做Dock的pojo。
public class Dock {
private Map<SupportedRegion, Region> regionalShipmentDetails = //
//some field and getter setter.
getChinaShipmentDetails() { this.regionalShipmentDetails.get(SupportedRegions.CHINA)}
setChinaShipmentDetails (Region china) {
this.regionalShipmentDetails.get(SupportedRegions.CHINA).add(china)
}
getRussiaShipmentDetails() {//same for russia}
setRussiaShipmentDetails (Region russia) {same for russia}
}
我們從這個xml中提取區域創建一個region對象並添加到Dock對象。 現在我們還維護一個枚舉,它定義了我們的應用程序支持的所有內容。
enum SupportedRegions{
CHINA (201, "APAC"),
RUSSIA (202, "EUR")
}
現在我們正在獲得支持其他地區的要求。現在我們要重構我們的代碼,使其變得簡單和可配置,以便支持團隊支持地區。
我們希望將其移出代碼並以最小的更改保留在屬性文件中。 我們有一些類似的調用代碼。
dock.getChinaShipmentDetails()
dock.getRussiaShipmentDetails().
現在,如果我刪除枚舉並移動屬性中的所有區域。我將不得不修改我的碼頭類這樣的事情
private Map<String, Region> regionalShipmentDetails = //
//some field and getter setter.
getShipmentDetailsForRegion (String region) { this.regionalShipmentDetails.get(region)
}
}
現在我的來電將變成
Region china = dock.getShipmentDetailsForRegion ("region")
現在我不想介紹在代碼中硬編碼字符串值,因爲這種變化影響了我的來電顯示類,現在它成爲調用者類負責傳遞正確的reion,以前的Dock只是暴露了方法支持的區域。
有什麼辦法在編譯時我不必使用硬編碼的字符串。
您只能在運行時從屬性文件加載常量,沒有允許編譯時加載 – Sanjeev