面试题答案
一键面试import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
public class GenericReflectionExample {
// 泛型方法,使用通配符和反射机制
public static <T> void callMethod(Class<T> clazz, List<? extends T> list, String methodName) {
try {
// 获取指定方法
Method method = clazz.getMethod(methodName);
for (T obj : list) {
// 通过反射调用方法
method.invoke(obj);
}
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
}
// 自定义类
public static class MyClass {
public void printMessage() {
System.out.println("Hello from MyClass!");
}
}
public static void main(String[] args) {
MyClass obj1 = new MyClass();
MyClass obj2 = new MyClass();
java.util.List<MyClass> list = java.util.Arrays.asList(obj1, obj2);
callMethod(MyClass.class, list, "printMessage");
}
}
上述代码包含以下几个部分:
- 泛型方法
callMethod
:- 该方法接受一个类对象
Class<T>
,一个包含该类对象实例的列表List<? extends T>
以及要调用的方法名methodName
。 - 使用
clazz.getMethod(methodName)
获取指定方法。 - 遍历列表,通过
method.invoke(obj)
反射调用列表中每个对象的指定方法。
- 该方法接受一个类对象
- 自定义类
MyClass
:- 包含一个无参数且返回值为
void
的方法printMessage
。
- 包含一个无参数且返回值为
- 主方法
main
:- 创建
MyClass
的实例并放入列表中。 - 调用
callMethod
方法,传入MyClass.class
、列表和方法名"printMessage"
进行测试。
- 创建