目前有一个Cat类添加了注释Service,Dog类没有添加注释Service,Cat类中的a2方法和Dog类中的a3方法添加了Auto注释,请写一个Demo类,输出添加了注释Service的类的类名,并运行这个类中添加了Auto注释的方法
时间: 2024-02-25 10:52:23 浏览: 71
可以使用Java反射来实现这个功能,示例代码如下:
```java
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
public class Demo {
public static void main(String[] args) throws Exception {
Class<?>[] classes = {Cat.class, Dog.class};
for (Class<?> cls : classes) {
Annotation serviceAnnotation = cls.getAnnotation(Service.class);
if (serviceAnnotation != null) {
System.out.println(cls.getName() + " has Service annotation");
}
Method[] methods = cls.getDeclaredMethods();
for (Method method : methods) {
Annotation autoAnnotation = method.getAnnotation(Auto.class);
if (autoAnnotation != null) {
System.out.println("Running method " + method.getName() + " in class " + cls.getName());
method.invoke(cls.newInstance());
}
}
}
}
}
```
这个示例代码中,首先定义了一个包含 `Cat` 和 `Dog` 类的数组,然后遍历这个数组中的每个类。对于每个类,首先判断它是否有 `Service` 注释,如果有就输出类名。然后遍历这个类中的每个方法,判断它是否有 `Auto` 注释,如果有就输出方法名和类名,并通过反射执行这个方法。需要注意的是,这个示例代码中使用了 `newInstance()` 方法来创建类的实例,这要求类必须有一个无参构造方法。如果类中没有无参构造方法,可以通过其他方式来创建类的实例。
阅读全文