2012-02-26 41 views
1

我試圖找出如何確定哪些類時,它在對象[]數組給定對象實例化。例如:如何在Object []數組中檢查給定對象是否是某個類的實例?

Object[] array = new Object[]{175, "sss", new Table(), true}; 
Object obj = array[0]; // hmm... can this be used as an integer or maybe as a string? 

這有可能嗎?

+0

你爲什麼要儲存在'Object'陣列的一切嗎? – 2012-02-26 18:38:35

+0

我使用Object數組來存儲調用Lua函數的參數。 – wassup 2012-02-26 18:39:58

回答

10

您可以撥打getClass()找出類特定對象,或者您可以使用instanceof來檢查規範IFIC類型:

if (array[0] instanceof Integer) { 
} 

通常不必做了很多這表明你的設計弱點,但 - 你應該嘗試需要避免這樣做。

+1

具體可能沒有整數,但詮釋 – 2012-02-26 18:39:59

+3

他有對象的數組,所以你一定沒有INT – UmNyobe 2012-02-26 18:45:23

+1

@MichalBorek'instanceof'只對工作對象和'int'是不是一個對象。如果你將'int'賦值給'Object',它將被自動轉換爲'Integer'。 – 2012-02-26 18:48:45

2

您可以測試它是否是一個預先知道類的一個實例(和投它)是這樣的:

if (obj instanceof String) { 
    String s = (String) obj; //casts the obj now you know it's a String 
} 

我喜歡把這個還不如做對象,但就像任何變化揭示其真實性格。例如,有點像看到一個人,不知道他們說的是什麼語言 - 這個人仍然是法語,或意大利語,只是你還不知道。演員(即(String) obj)是你告訴編譯器的相當於「我知道這個人會講法語」

或者你可以得到它的階級是這樣的:

Class<?> clazz = obj.getClass(); 

一個Class實例可以使用做相同的檢查:

String.class.isInstance(obj) { 
    String s = String.class.cast(obj); 
} 
4

您可以嘗試使用instanceof或者你可以嘗試getClass().isAssignableFrom(),任何適合您的需求

相關問題