正如标题所示,有没有办法看一个方法是否有一个使用反射的空体?
答案 0 :(得分:4)
通过反思,我不这么认为。您可以查看BCEL但是......
字节代码工程库是 旨在为用户提供方便 分析,创建和分析的可能性 操纵(二进制)Java类文件
这是一个可以让您从这个article ...
开始的剪辑public class ClassViewer{
private JavaClass clazz;
public ClassViewer(String clazz){
this.clazz = Repository.lookupClass(clazz);
}
public static void main(String args[]){
if(args.length != 1)
throw new IllegalArgumentException(
"One and only one class at a time!");
ClassViewer viewer = new ClassViewer(args[0]);
viewer.start();
}
private void start(){
if(this.clazz != null){
// first print the structure
// of the class file
System.err.println(clazz);
// next print the methods
Method[] methods = clazz.getMethods();
for(int i=0; i<methods.length; i++){
System.err.println(methods[i]);
// now print the actual
// byte code for each method
Code code = methods[i].getCode();
if(code != null)
System.err.println(code);
}
}else
throw new RuntimeException(
"Class file is null!");
}
}
答案 1 :(得分:1)
不,您无法使用反射检查任何给定方法的实际(字节)代码。
答案 2 :(得分:0)
这种信息不能通过通常的反射API获得,它会检索类和实例变量,方法签名等,但不是实际的字节码。
你可以使用一个库:
JavaAssist
BCEL
答案 3 :(得分:0)
您可能需要使用“Java代理”。做这种事情应该没有任何合理的借口。话虽如此,JVM本身的典型实现将会忽略可终结的对象。