2011-06-02 86 views
17

正如我們所知,C#提供了一個AS關鍵字,該關鍵字自動執行檢查Object是否爲類型,如果是,則將其轉換爲所需的類型其他給出一個null。Java中是否有任何關鍵字與C#中的'AS'關鍵字相似?

public class User

{

}

....

Object obj = someObj;

User user = obj As User;

...

在上述例子中

這裏, 的對象物OBJ的類型可以是用戶或一些其他類型的。 用戶將獲取User類型的對象或null。 這是因爲C#的As關鍵字首先執行檢查,並且如果可能,則執行將對象強制轉換爲結果類型。

那麼Java中有沒有關鍵字等同於C#的AS關鍵字呢?

+0

不錯的問題,雖然我認爲「as」是一個真正可怕的模式 - 我寧願使用一個演員陣容,並得到一個例外(即一個嘈雜的失敗,你可以修復),而不是一個沉默的轉換爲null,可以咬你一些隨機點在未來.....,如果你真的不知道演員是否會工作或沒有,你仍然必須在以後測試null,所以你甚至沒有保存任何輸入! – mikera 2011-06-02 20:28:19

+2

你仍然可以像Java的鑄造一樣投射它。 「as」是開發者慎重的選擇,他說:「我不希望這種轉換異常,如果它不是我想要的空類型」 – Hounshell 2011-11-23 21:12:22

回答

23

您可以創建一個輔助方法

public static T as(Object o, Class<T> tClass) { 
    return tClass.isInstance(o) ? (T) o : null; 
} 

User user = as(obj, User.class); 
+2

小東西 - 這是實例,而不是isInstanceOf – 2011-06-02 20:17:09

+0

@Jeff,謝謝你。 – 2011-06-02 20:18:33

+0

謝謝彼得......會用你的方式嘗試。 – 2011-06-02 20:23:53

20

沒有,你可以用instanceof檢查,然後抹上如果匹配

User user = null; 
if(obj instanceof User) { 
    user = (User) obj; 
} 
+0

我認爲你的意思是'x instanceof User',對吧? – templatetypedef 2011-06-02 20:09:17

+0

是的,修正它以匹配問題 – jberg 2011-06-02 20:10:23

+3

但使用instanceof就像使用C#的IS關鍵字。 – 2011-06-02 20:11:32

11

無關鍵詞,但對於完整性我給你1相當於:

User user = obj instanceof User ? (User) obj : null; 

(您可能不需要進行明確的轉換,我不確定。)