2013-09-16 31 views
2

我不確定這個問題是否屬於這裏。我已經編寫了以下方法來將對象轉換爲特定的類型。Java cast方法

private static <T> T cast(Object obj) { 
    return (T) (obj); 
} 

我想知道爲什麼我在番石榴或Apache Commons中找不到這種方法?我錯過了什麼嗎?

感謝,

Venk

+3

爲什麼你想要這個方法呢? –

+3

因爲這種方法是a)由於類型擦除而導致無操作,並且b)實際上並沒有比實際執行演員明顯縮短嗎? –

+0

我同意第一部分。如果您使用Google地圖,它顯着更短。 –

回答

7

您可以使用非標準cast方法與方法

SomeClass o = SomeClass.class.cast(obj); 

沒有理由使用你的方法

SomeClass o = Utils.<SomeClass>cast(obj); 
+2

也有內建演員:SomeClass o =(Someclass)blammo; – DwB

+2

@DwB作者不尋找簡單的方法:) – Ilya

+2

@Ilya:用問題中提出的方法,代碼看起來像'SomeClass o = Utils.cast(obj);'...類型是從目標推斷的的任務。 – ColinD

1

因爲它不typesave。特別是番石榴的目的是最大限度地利用javas靜態打字。使用你的方法,可以將任何類的對象轉換爲任何其他類的對象。這不應該完成。

,如果你想嘗試以下

Integer a = (Integer) "1"; 

,編譯器會理所當然地抱怨。如果你使用你的轉換方法,你只需要擺脫編譯錯誤並將錯誤推遲到運行時。這從來不是一個好主意。此外,編譯器會警告您,對T的轉換未經檢查,可能會在稍後導致問題。

在大多數情況下,java類型推斷非常穩定,您應該聽取編譯器警告。

反觀另一方面幾乎完全拋棄了java類型系統。處理這是有點棘手,但有辦法檢查類型是否兼容(例如Class.isAssignableFrom(Class))。