gpt4 book ai didi

java - 编译时自动添加未实现的方法

转载 作者:搜寻专家 更新时间:2023-11-01 01:44:43 24 4
gpt4 key购买 nike

我正在尝试寻找如何实现类似于 Eclipse 功能“添加未实现的方法”的 hack。

与其在编写代码时添加这些方法,不如在编译期间添加这些方法,使用模板生成方法体。此外,我不想修改原始 .java 源文件。

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

interface I { void foo(); }
class C implements I {
public static void main(String[] args) { new C().foo(); }
}

编译它通常会导致错误,因为 I.foo 没有实现。

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

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

我对 AspectJ 比较满意,但我不知道如何使用类型间声明来完成它。

除了使用我自己的 Java 解析器和生成代码之外,有什么建议可以如何完成?

最佳答案

project lombok ,因为 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);
}

并生成一个类,如

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 使用 JSR 269 Pluggable Annotation Processing API .

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

关于java - 编译时自动添加未实现的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14740743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com