javase编写一个通用方法,实现对任意类的对象的任意方法的调用
时间: 2024-02-06 22:09:22 浏览: 97
Java中实现在一个方法中调用另一个方法
可以使用Java反射机制来实现这个通用方法。具体实现如下:
```java
import java.lang.reflect.Method;
public class MethodCaller {
public static Object callMethod(Object obj, String methodName, Object... args) throws Exception {
Class<?>[] paramTypes = new Class[args.length];
for (int i = 0; i < args.length; i++) {
paramTypes[i] = args[i].getClass();
}
Method method = obj.getClass().getMethod(methodName, paramTypes);
return method.invoke(obj, args);
}
}
```
这个通用方法名为callMethod,接收三个参数:对象obj、方法名methodName和方法参数args。该方法的返回值类型为Object,因为它可以用来调用任意类的任意方法,所以返回值类型也需要是通用的。
在方法内部,首先通过args数组中每个参数的getClass()方法获取参数的类型,存储在paramTypes数组中。然后通过obj.getClass().getMethod(methodName, paramTypes)方法获取指定方法名和参数类型的Method对象。最后通过method.invoke(obj, args)方法调用该方法,并返回调用结果。
使用该方法的示例代码如下:
```java
public class Test {
public static void main(String[] args) throws Exception {
String str = "hello";
String result = (String) MethodCaller.callMethod(str, "substring", 1, 3);
System.out.println(result); // 输出 "el"
}
}
```
在这个示例代码中,我们使用通用方法callMethod来调用String类的substring方法,并获取其返回值。因为我们在调用callMethod方法时传递了正确的参数,所以调用结果为"el"。
阅读全文