0
因此,我正在構建一個EAR的實用JAR,並且我有一個類提供需要XML字符串的靜態方法。我嵌入一個XML文件在我的JAR資源,我在靜態塊在類的初始化時間閱讀:我應該在靜態初始化塊中獲取資源嗎?
static{
try {
base = IOUtils.toString(CartSessionFactory.class.getResourceAsStream("/createcartTemplate.xml"));
if(base==null){
throw new Exception("createcartTemplate.xml not found as a resource");
}
//check the file correctness
//[...]
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
一位同行的編碼告訴我,他在該設計嚇壞了,但不能解釋清楚爲什麼(但建議改爲使用Singleton)。它似乎工作,但。這是不好的設計,爲什麼?
如果'base == null'會發生什麼?在這之後,這個塊被執行了嗎?第一次有人試圖使用'base'會發生什麼? –
與資源加載無關,但您應該關心的一件事是'if':Java爲了避免意大利麪代碼而沒有'goto'功能。如果你故意拋出一個被外層'try'捕獲的異常(並且被忽略),它會和'goto'具有相同的行爲,這是一個強烈的阻止做法。 – BackSlash
「,但建議改爲使用單例」他能給出一個很好的理由嗎? –