簡體   English   中英

Java,如何動態判斷數組的類型?

[英]In Java, how do I dynamically determine the type of an array?

Object o = new Long[0]
System.out.println( o.getClass().isArray() )
System.out.println( o.getClass().getName() )
Class ofArray = ???

運行前 3 行發出;

true
[Ljava.lang.Long;

如何得到??? 類型長? 我可以解析字符串並執行 Class.forname(),但這很糟糕。 什么是簡單的方法?

寫吧

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

JavaDoc

public Class<?> getComponentType()

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

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Class.html#getComponentType()

 public Class<?> getComponentType() 

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

@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

非常簡單!

如果我錯了,請糾正我,但是 [Ltype 規范是定義的 java 標准,您可以使用它來計算類型為“類型”的多維數組的維度。 只計算括號。 是的,與不存在的dimensionof運算符相比,它有點糟糕。 很想聽聽是否有其他方式。 需要一種將方法參數指定為“T 的不確定維度數組”的通用方法嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM