我想为Class1创建一个代理类:
Public class Class1 {
public void log(String str){
....
}
public void log(String str1, Object obj){
....
}
....
}
Class1有许多具有相同名称“log”但具有不同参数的日志函数。我想为Class1创建一个代理/代理类,但不想重复它的所有功能。我尝试了以下方法,它没有用。
public class agentForClass1 {
protected Class1 obj1;
public log(Object... objs){
obj1.log(objs);
}
}
你能帮忙吗?这在Java中是否可行?
答案 0 :(得分:1)
是的,它是:)你可以使用java Reflection功能。
这是一张草图,我已经测试了你给出的Class1的定义。诀窍是isInstance
方法。
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Class1Agent {
private Class1 class1 = new Class1();
public void log(Object... objects) throws IllegalArgumentException,
IllegalAccessException, InvocationTargetException {
Method[] methods = class1.getClass().getMethods();
for (Method method : methods) {
Class<?>[] parameterTypes = method.getParameterTypes();
if (objects.length == parameterTypes.length) {
int i = 0;
while (i < objects.length
&& parameterTypes[i].isInstance(objects[i])) {
++i;
}
if (i == objects.length) {
method.invoke(class1, objects);
break;
}
}
}
}
}