Mis*_*ble 4 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(); }
}
Run Code Online (Sandbox Code Playgroud)
编译它通常会导致错误,因为I.foo
没有实现.
我希望编译成功并随后执行以使用我的模板.模板可以是简单的东西{throw UnsupportedOpeationException()
}我希望能够获得有关方法和实现的接口的更多信息并在模板中使用它,但这应该不难?
我的第一个想法是尝试注释(AutoImplementMethods
)但注释处理器不能修改它正在处理的注释代码.
我有点习惯,AspectJ
但我不知道如何使用类型间声明.
任何建议如何做到这一点,没有使用我自己的java解析器和生成代码?
看看项目lombok,因为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);
}
Run Code Online (Sandbox Code Playgroud)
并生成一个类,
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;
}
}
Run Code Online (Sandbox Code Playgroud)
Lombok使用JSR 269 Pluggable Annotation Processing API.
有一篇文章描述了lombok如何在这里工作,以及如何添加自己的转换.
归档时间: |
|
查看次数: |
975 次 |
最近记录: |