2011-07-16 195 views
1

我正在編寫一個使用Google Gson將對象轉換爲JSON的快速方法。這很簡單,但我想集中的情況下,我的JSON建設過程中,我要作進一步修改:是否可以傳遞Object對象作爲方法參數

public static String buildJSONObject(Object obj) { 
    Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); 
    return gson.toJson(obj); 
} 

現在我有一個關於這個(工作)兩個問題,

-Is使用對象好嗎作爲方法的參數,還是有更好的方法使用泛型?

- 如果不斷將對象轉換爲任何類型的對象傳遞給該方法,是否存在性能開銷?

+0

泛型將爲您提供編譯時類型安全的好處,所以是的,如果您知道使用此方法的類型可能會更好。 –

回答

1

正在使用Object okay作爲方法參數,還是有更好的方法使用泛型?

泛型提供了類型安全性和更好的意圖,從而導致更清晰的代碼。話雖如此,當你知道你要傳遞給方法的對象是什麼類型,並且你已經建立了某種對象擴展,並且擴展了所有可用JSON的對象時,它們纔會提供這些好處。如果你真的想把太陽下的任何物體變成JSON,Object obj就是要走的路。

如果不斷將對象轉換爲任何類型的對象傳遞給方法,是否會有性能開銷?

鑄造沒有性能問題。你應該擔心的是來自無效轉換的類型安全和RuntimeExceptions。如果您確定進入方法的對象類型,請小心地進行強制轉換。你總是可以先做一個安全的演員,並且首先檢查一下instanceof,這樣可以減少這個問題。

0

您是否希望能夠將任何類型的對象傳遞給該方法?如果是這樣,參數類型應該是Object。這裏的所有都是它的。泛型僅在實際執行某些操作時才提供價值,例如約束輸入類型,以便可以調用某些方法,確保方法的多個參數以某種特定方式關聯,或確保輸出類型與輸入相關以某種方式鍵入,等等。在這種情況下,通用參數不會提供任何Object沒有的東西。

而且你肯定不應該擔心從那裏的任何開銷(反正有可能沒有)。如果您想擔心開銷,可以考慮每次調用方法時,如何創建GsonBuilder的新實例以創建Gson的新實例,何時可以重新使用單個Gson對象。

+0

我實際上使用一個靜態字段來存儲GsonBuilder,但我想說明我是如何到達gson位的,以防萬一它有所作爲。然而,你說這讓我看到了我剛剛使用JetS3t實用程序所做的其他事情,並且我修復了它,謝謝。 – oberger

相關問題