В Java, как мне динамически определить тип массива?
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(), но это громоздко. Какой простой способ?
Ответы
Ответ 1
Просто напишите
Class ofArray = o.getClass().getComponentType();
От JavaDoc:
public Class<?> getComponentType()
Возвращает Class
, представляющий тип компонента массива. Если этот класс не представляет класс массива, этот метод возвращает null
.
Ответ 2
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Class.html#getComponentType():
public Class<?> getComponentType()
Возвращает Class
, представляющий тип компонента массива. Если этот класс не представляет класс массива, этот метод возвращает null...
Ответ 3
@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
Довольно просто!