私はJavassistの初心者で、チュートリアルをほとんど試していません。私は、Javassistがバイトコードを操作するのに役立ち、構造的な反映を達成するのに役立つことを理解しています。 wiki(http://en.wikipedia.org/wiki/Javassist)で述べたように、私はそれが反映を達成するためのサポートを持っていると思います。Javassistを使ってメソッドを呼び出す
私は基本的な評価をして、Javaリフレクションがメソッドを呼び出すのにどれだけの時間が必要か、javassistがどのくらいの時間を要するかを理解しようとしています。プロセスでは、私はクラスがあると仮定:
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);
}
}
}
:JavaのリフレクションAPIを使用して、今すぐ
public class Addition {
public int add(int a, int b){
return a+b;
}
}
を、私は、100個のオブジェクトを呼び出すために取られるhowmuch時間を計算するために、次のコードを使用します
今、javassistをどのように進めるべきか分かりません。すなわち、
私はctclassオブジェクトを作成し、私が読む予定のクラスを保存します。 getdeclaredmethodsを使用して宣言されたメソッドをすべて取得し、ctMethod変数に格納することもできます。
しかし、JavaリフレクションAPIとは異なり、私はjavassistのctMethod apiでinvokeメソッドを見つけることができません。つまり、重複したメソッドを作成して、http://www.ibm.com/developerworks/java/library/j-dyn0916/index.htmlで説明されているように、元のメソッドを呼び出す必要があります。
これが正しい方法であるかどうかはわかりません。
何か不足していますか?