我是 Javassist 的新手并尝试了一些教程。我了解 Javassist 有助于操作字节码并有助于实现结构反射。正如 wiki ( http://en.wikipedia.org/wiki/Javassist ) 中提到的,我相信它确实支持实现反射。
我正在尝试进行基本评估,以了解 java 反射调用方法需要多少时间以及 javassist 需要多少时间。在此过程中,假设我有一堂课:
public class Addition {
public int add(int a, int b){
return a+b;
}
}
现在,使用 java 反射 api,我将使用以下代码来计算调用 100 个对象需要多少时间:
import java.lang.reflect.*;
public class ReflectionClass {
/**
* @param args
*/
public static void main(String[] args) {
int numberOfObjects = 10000;
double start,time;
try {
Class cls = Class.forName("Addition");
Class partypes[] = new Class[2];
partypes[0] = Integer.TYPE;
partypes[1] = Integer.TYPE;
Method meth = cls.getMethod(
"add", partypes);
Addition methobj = new Addition();
Object arglist[] = new Object[2];
arglist[0] = new Integer(37);
arglist[1] = new Integer(47);
start = System.currentTimeMillis();
for(int i=0;i<numberOfObjects;i++){
Object retobj= meth.invoke(methobj, arglist);
Integer retval = (Integer)retobj;
System.out.println(retval.intValue());
}
time = System.currentTimeMillis() - start;
System.out.println("Method call for "+numberOfObjects +" objects is::"+time +" milliseconds");
}
catch (Throwable e) {
System.err.println(e);
}
}
}
现在,我不确定如何继续使用 javassist。IE,
我将创建一个 ctclass 对象并存储我要阅读的类。我还可以使用 getdeclaredmethods 获取所有声明的方法并将其存储在 ctMethod 变量中。
但是,与java反射api不同,我在javassist的ctMethod api中找不到调用方法。这是否意味着,我必须创建一个重复的方法,并且必须按照以下说明调用原始方法:http: //www.ibm.com/developerworks/java/library/j-dyn0916/index.html。
我不确定这是否是正确的方法。
我错过了什么吗?