条件生成方法体以满足Java中的大型接口

Mil*_*son 3 java eclipse templates code-generation pattern-matching

Java OpenGL GL接口包含大约2000个方法,出于调试目的,我想在执行一些日志记录时包装一个实例并委托对它进行调用.在每种情况下,日志代码都可以推送到相同的方法,因此写出方法实现的任务看起来可以自动化.我想要做的一个例子:

import javax.media.opengl.GL;

public class GLErrorLogger implements GL {
  private final GL backing;

  public GLErrorLogger(GL delegateToMe) {
    backing = delegateToMe;
  }

  private void checkErrorCode() {
    // Log frame and thread details depending on gl state
  }

  /**
   * Example of a method
   */
  @Override
  public int glGenLists(int arg0) {
    checkErrorCode();
    int retVal = backing.glGenLists(arg0);
    checkErrorCode();
    return retVal;
  }

  // rest of methods here...
}
Run Code Online (Sandbox Code Playgroud)

换句话说,将方法名称和参数(减去它们的类型)复制到后备对象上的调用中,使用对日志记录方法的调用进行环绕,如果有返回类型,则将结果分配给此类型的变量并将其返回在方法的最后.

我看了创建一个单独的eclipse代码模板来自动生成方法,但是没有一种直接明显的方法在返回类型上进行模式匹配.任何人都可以建议一种方法在Eclipse或其任何代码生成工具中执行此操作,以节省我拔出正则表达式工具包?

小智 5

您可能希望使用Aspect为您创建必要的字节码,而不是生成所有源代码.请查看此处的跟踪方面示例:跟踪方面示例.

作为替代方案,如果您不想将AspectJ用作Thrid方库,则可以创建Java动态代理.请参阅动态代理教程