使用Java Reflection测试空方法体

时间:2011-02-03 13:52:50

标签: java reflection

正如标题所示,有没有办法看一个方法是否有一个使用反射的空体?

4 个答案:

答案 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本身的典型实现将会忽略可终结的对象。