2016-01-08 83 views
1

在java中,可以投射一個物體而不必將其分配給另一個物體。例如:你可以沒有賦值給另一個對象嗎?

Object x = Class.forName(name).newInstance(); 
if(x instanceof Date){ 
    (Date)x; 
    x.setTime(0); 
} 

編譯器不會讓我做,除非我把它分配給另一個Date對象,但有我在其中能投放,而無需分配到另一個對象的方法嗎?

因爲當你指定例如:Date a = (Date)x時,a和x最終成爲引用,都可以觸摸Date方法。但爲了讓我的代碼更清潔,是否有一種方法可以在無需分配的情況下進行投射?

回答

6

它是有效的做到這一點:

Object x = Class.forName(name).newInstance(); 
if(x instanceof Date){ 
    ((Date)x).setTime(0); 
} 
2

一投不改變的對象,或變量的類型。它僅告訴編譯器立即將該表達式視爲鑄造類型。這隻有在你真正對錶達做某事時纔有意義。

在您的代碼中,您告訴編譯器將表達式x視爲Date - 請注意,只是表達式而非變量。

編譯器可能會忽略該強制轉換,因爲它不會再使用它。顯然,它決定將此標記爲錯誤,因爲在大多數情況下,它表示代碼存在問題。

查看Jason的正確答案。

相關問題