12.4.3 在运行时使用反射获取注解(2)
这个程序使用前面介绍的反射,获取并显示与Meta类中myMeth()方法关联的MyAnno注解中str和val的值。有两点需要特别注意。第一点,注意下面这行代码中的表达式MyAnno.class:
对这个表达式求值的结果是表示MyAnno类型的Class对象,即注解。这种结构被称为“类字面值”。无论何时,当需要已知类的Class对象时,就可以使用这类表达式。例如,可以使用下面这条语句获取Meta的Class对象:
- MyAnno anno = m.getAnnotation(MyAnno.class);
- Class<?> c = Meta.class;
当然,只有当事先知道对象的类名时才能使用这种方式,但我们并不总是知道对象的类名。通常,可以获取类、接口、基本类型以及数组的类字面值(记住,<?>语法与Java的泛型特性有关,泛型将在第14章介绍)。
需要注意的第二点是,当通过下面这行代码进行输出时,如何获取与str和val关联的数值:
- System.out.println(anno.str() + " " + anno.val());
注意这里使用方法调用语法来调用它们。当需要注解成员的值时,可以使用相同的方式。
1. 第二个反射示例
在前面的例子中,myMeth()方法没有参数。因此,当调用getMethod()方法时,只传递名称myMeth。但是,为了获取带有参数的方法,必须指定表示参数类型的类对象作为getMethod()方法的参数。例如,下面的程序与前面的程序稍微有些区别:
|
该版本的输出如下所示:
- Two Parameters 19