2008-10-17 64 views
29
Object o = new Long[0] 
System.out.println(o.getClass().isArray()) 
System.out.println(o.getClass().getName()) 
Class ofArray = ??? 

運行前3行發出;在Java中,我該如何動態確定數組的類型?

true 
[Ljava.lang.Long; 

我該如何獲得?是長型?我可以解析字符串並做一個Class.forname(),但那很糟糕。簡單的方法是什麼?

回答

56

只要寫

Class ofArray = o.getClass().getComponentType(); 

the JavaDoc

public Class<?> getComponentType()

返回Class代表數組的組件類型。如果此類不表示數組類,則此方法返回null

6

@ddimitrov是正確的答案。投入代碼,它看起來是這樣的:

public <T> Class<T> testArray(T[] array) { 
    return array.getClass().getComponentType(); 
} 

甚至更​​一般地,我們可以測試先來看看,如果該類型表示一個數組,並然後獲取其組件:

Object maybeArray = ... 
Class<?> clazz = maybeArray.getClass(); 
if (clazz.isArray()) { 
    System.out.printf("Array of type %s", clazz.getComponentType()); 
} else { 
    System.out.println("Not an array"); 
} 

一個具體的例子將該方法應用於已知組件類型的陣列:

String[] arr = {"Daniel", "Chris", "Joseph"}; 
arr.getClass().getComponentType();    // => java.lang.String 

非常簡單!

+0

如果第一個元素爲空,即String [] arr = {null,「Chris」,「Joseph」}; – Psycho 2016-09-25 06:34:24

相關問題