Как 'getConstructor', где подпись конструктора содержит массив Java - PullRequest
8 голосов
/ 17 января 2010

Можно ли использовать getConstructor для получения конструктора класса X ниже?

public class A {
}

public class Y {

}

public class X extends Y {
    public X(A a, Y[] yy) {

    }
    public void someMethod() throws SecurityException, NoSuchMethodException {
        Class<? extends Y> clazz = X.class;
        Constructor<? extends Y> c =
            clazz.getConstructor(new Class[]{
                        A.class,
                        /* what do I put in here for the array of Ys? */
                    });
    }
}

Спасибо

Ответы [ 2 ]

7 голосов
/ 17 января 2010

Вы можете создавать литералы классов с использованием нотации массива, как если бы вы использовали «недекорированные» классы, а именно ClassName[].class. Этот литерал выдает «класс, который описывает массивы экземпляров ClassName». В вашем случае:

clazz.getConstructor(new Class[] {
    A.class,
    Y[].class
 });
6 голосов
/ 17 января 2010

или короче.

    Constructor<X> c = X.class.getConstructor(A.class, Y[].class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...