我有一個方便的函數,它接受各種類型的對象並以可序列化的方式轉換它們。例如,JSON狀物體被轉換成JSON:避免由擴展/實現引起的模糊方法
public static <T> String process(List<T> list) {
if(list instanceof JSONArray) {
return ((JSONArray) list).toJSONString();
}
// stringify the list
}
public static String process(JSONAware object) { // array, map, value, ...
return object.toJSONString();
}
我使用的org.json.simple
庫,所以JSONArray extends ArrayList implements JSONAware
。但是,這意味着,當我送一個JSONArray,我得到:
參考流程是模糊
我知道,它同樣可以去任何一種方法,這就是爲什麼我有等同的實現同時。
很明顯,我可以用一個取代任意Object
類型的函數來取代這兩個函數,但是這會刪除很多我不開心的編譯時檢查。我也可以重命名其中一個函數來強制某個選擇,但這會使API複雜化。
是否有某種方法可以強制某個選擇,或者讓編譯器明白,在這些情況下調用哪個方法並不重要?
Wy的你有第二個 - 你可以調用toJSONString對象 – Mark
這是代碼的減少的例子上。想想它像serialize-over-http;它還存儲關於發送的對象類型的信息。我正在使用它,以便基於Web的界面可以顯示有關任意對象的信息(以及發送數據中包含的對象的類型) – Dave