Второй пример применения рефлексии

В предыдущем примере myMeth О не имел параметров. То есть когда вызывался getMethod (), передавалось только имя myMeth. Однако для того, чтобы получить метод, который имеет параметры, вы должны специфицировать объекты класса, представляющие типы этих параметров, в виде аргументов getMethod (). Например, ниже показана слегка измененная версия предыдущей программы.

import java.lang.annotation.*;
import java.lang.reflect.*;
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnno {
String str ();
int val();
}
class Meta {
// myMeth теперь имеет два аргумента.
@MyAnno(str = "Два параметра", val = 19)
public static void myMeth(String str, int i) {
Meta ob = new Meta () ;
try {
Class с = ob.getClass () ;
// Здесь указываются типы параметров.
Method m = с.getMethod("myMeth", String.class, int.class);
MyAnno anno = m.getAnnotation(MyAnno.class);
System.out.println(anno.str() + " " + anno.valO);
}
catch (NoSuchMethodException exc) {
System.out.println("Метод не найден.");
}
}
public static void main(String args[]) {
myMeth("TecT", 10);
}
}

Результат работы этой версии будет таким:

Два параметра 19

В этой версии myMeth () принимает параметры String и int. Чтобы получить информацию об этом методе, getMethod () должен быть вызван следующим образом:

Method m = с.getMethod("myMeth", String.class, int.class);

Здесь объекты Class, представляющие String и int, передаются в виде дополнительных аргументов.