6

私の目標

実行時に比較が行われるタイミング(または、*、-、/、>、<、..などの他の操作)を検出できるようにするため。

これは、Javassistまたはow2ASMを使用してクラスのバイトコードを編集するために実現する必要があります

達成しなければならないこと

このコード

public class Test{

    public void m(){

        if(a>2){
        //blablabla         
        }

    }  

}

になる必要があります

public class Test{

    public void m(){

        if(someExternalClass.greaterThan(a,2)){
            //blalbla           
    }

    }

}

greatThanは、「>」とまったく同じ結果を返しますが、比較の量を節約するためにも使用されます。その後、比較が行われるたびに外部クラスに通知されます。

追記

それは、手術があるところならどこでも行われなければなりません。したがって、ifステートメントだけではありません。

これの意味は

int a = c+d;

またになる必要があります

int a = someExternalClass.add(c,d);

Javassistまたは他のライブラリでこれを実現する方法について何か提案はありますか。

IFLT、IFGTなどのオペコードと関係があると思います

4

2 に答える 2

2

この巧妙なハック: http://www.jroller.com/eu/entry/operation_overloading_in_javaがヒントになります。元のアイデアは、演算子のオーバーロード サポートを Java に提供することです。まったく同じことをしているわけではありませんが、多少関連しています。

于 2012-04-09T15:18:34.923 に答える