Java 在编译期间自动添加未实现的方法

Java 在编译期间自动添加未实现的方法,java,code-generation,aspectj,cglib,Java,Code Generation,Aspectj,Cglib,我正在试图找到如何实现一个类似于Eclipse功能“添加未实现的方法”的hack 我不想在编写代码时添加这些方法,而是希望在编译过程中使用模板生成方法体。此外,我不想修改原始的.java源文件 例如,假设我有以下内容: interface I { void foo(); } class C implements I { public static void main(String[] args) { new C().foo(); } } 编译此文件通常会导致错误,因为未实现I.foo 我

我正在试图找到如何实现一个类似于Eclipse功能“添加未实现的方法”的hack

我不想在编写代码时添加这些方法,而是希望在编译过程中使用模板生成方法体。此外,我不想修改原始的.java源文件

例如,假设我有以下内容:

interface I { void foo(); }
class C implements I { 
  public static void main(String[] args) { new C().foo(); }
}
编译此文件通常会导致错误,因为未实现
I.foo

我希望编译成功,随后的执行使用我的模板。模板可以是像
{throw unsupportedepeationexception()
}这样简单的东西。我确实希望能够获得有关方法和实现接口的更多信息,并在模板中使用它,但这应该不难吧

我的第一个想法是尝试注释(
AutoImplementMethods
),但是注释处理器无法修改它正在处理的注释代码

我对
AspectJ
有点满意,但我不知道如何使用类型间声明来实现它


除了使用我自己的java解析器和生成代码之外,还有什么建议吗?

我使用JDT Eclipse进行了一些代码注入。它生成Java文件的抽象语法树(AST),并解析各种绑定。JDT允许您直接在语法树级别更改代码。以下是一些有用的链接:

看看,龙目山做的事情与你想要的类似

Lombok将获取该来源

public class GetterSetterExample {
  @Getter @Setter private int age = 10;
  @Setter(AccessLevel.PROTECTED) private String name;

  @Override public String toString() {
    return String.format("%s (age: %d)", name, age);
  }
并生成一个类,如

public class GetterSetterExample {
  private int age = 10;
  private String name;

  @Override public String toString() {
    return String.format("%s (age: %d)", name, age);
  }

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }

  protected void setName(String name) {
    this.name = name;
  }
}
龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙目龙


有一篇文章描述了lombok是如何工作的,以及如何添加您自己的转换。

我使用JDT Eclipse进行了一些代码注入。它生成抽象语法树(AST)java文件的所有绑定都已解决,您可以更改树,它将直接更改代码。@Shivamkara您知道某个地方的教程或示例吗?我确实需要一种与
javac
一起工作的方法,但是我可以使用eclipse查看codegen部分。不过,关于它的教程并不多!但是这里有一个我在网上找到的->你能把你的评论转换成包含单独链接的回复吗?这看起来很有希望。谢谢。那是。。。难以置信的惊人。谢谢