1

BCELでこれを確認するにはどうすればよいですか..

Javaのバイトコードは

newarray 10 (int)

私はこれをすでに訪問者のために行っています

instruction instanceof NEWARRAY

public boolean visit(Instruction instr) {
    return instr instanceof NEWARRAY;
}

しかし、newarray がint[]

BCELでこれを確認するにはどうすればよいですか?

私はこれを試しました

 && ((NEWARRAY) instr).getType() == Type.INT;

よく

return instr instanceof NEWARRAY && ((NEWARRAY) instr).getType() == Type.INT;

しかし、上記の ^ は機能しないことがわかりますint..しかしint[]

しかしType.INT、ただint..ではないint[]..

Type をどのように表現しint[]ますか?

私はBCELソースコードを読んでいて、NEWARRAY.getType()はこれを返します..

     /**
      * @return type of constructed array
      */
     public final Type getType() {
         return new ArrayType(BasicType.getType(type), 1);
     }

ご覧のとおり、クラスを返すTypeので.. http://commons.apache.org/bcel/apidocs/org/apache/bcel/generic/Type.htmlを見てください

http://commons.apache.org/bcel/apidocs/org/apache/bcel/generic/ArrayType.html

TypeARRAYには何もありませんint[]

4

1 に答える 1

1

私はあなたの質問をよく理解していないと思いますが、これはどうですか?

if(instr.getClass().isArray()) return instr instanceof NEWARRAY[];
else return instr instanceof NEWARRAY;
于 2011-08-16T04:52:03.630 に答える