Получите класс Foo []. Данный Foo.class - PullRequest
1 голос
/ 28 марта 2012

У меня есть объект, c, типа Class (я получаю объект во время выполнения, поэтому не могу сказать во время компиляции, какой класс он представляет.)

Предположим, c представляет класс Foo.Теперь я хочу заполучить Class -экземпляр, который представляет Foo[].

Как лучше всего это сделать с помощью стандартного API Java?

Ответы [ 3 ]

3 голосов
/ 28 марта 2012

Согласно http://tutorials.jenkov.com/java-reflection/arrays.html, одним из способов является:

Class arrayClass = java.lang.reflect.Array.newInstance(c, 0).getClass();

Это похоже на чит, но это определенно чище, чем играть с классом names .

1 голос
/ 28 марта 2012

Вот пример того, как это сделать:

import java.lang.reflect.Array;
public class ReflectTest {
    public static void main(String[] args) {
        Foo c = new ReflectTest().new Foo();
        Foo[] foos = (Foo[]) Array.newInstance(c.getClass(), 5);
    }
    class Foo {
    }
}
0 голосов
/ 28 марта 2012

Из того, что я вижу в своем тесте, это должно работать:

Class c = ...
Class cArr = java.lang.reflect.Array.newInstance(c, 1).getClass();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...