2014-02-03 4 views
1

В библиотеке есть функция принимает объект класса в качестве параметра:типа параметра при использовании Java Reflection

public void libMethod(Class<?> cls){...} 

Мне нужно вызвать эту функцию библиотеки в Java Reflection образом.

Например, у меня есть класс:

public MySchool extends School{...} 

Я хочу передать MySchool класс библиотечной функции. Я пробовал:

//I can successfully get library class & a instance of it 
Class<?> libClass = GET_LIB_CLASS(); 

//How can I define the type for the parameter? 
Method m = libClass.getDeclaredMethod("libMethod", new Class[]{MySchool.class}); 
return m.invoke(libClass.newInstance(), MySchool.class); 

Я попытался сделать это выше, но он не работает.

Как определить тип параметра в моем примере java отражения?

ответ

1

Обратите внимание, что ваш метод принимает аргумент типа Class<?>. Аргумент, который вы передаете в Class#getDeclaredMethod(), представляет собой массив из Class экземпляров для типов параметров формата этого метода, который в этом случае будет Class.class, а не MySchool.class.

Таким образом, вы должны получить метод, как:

Method m = libClass.getDeclaredMethod("libMethod", new Class[]{Class.class}); 
+0

Спасибо, это работает. Я приму ваш ответ в 3 мин. –

Смежные вопросы