Як мені в 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);
}
Як ви бачите, він повертає a 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
немає жодного Type
"s для ARRAY int[]
.
Відповіді:
1 для відповіді № 1Я не думаю, що добре розумію ваше запитання, але як щодо цього:
if(instr.getClass().isArray()) return instr instanceof NEWARRAY[];
else return instr instanceof NEWARRAY;