我有这门课:
@SuperBuilder
public abstract class EventFinder<EventType> {
private final String accountId;
public abstract List<EventType> find();
public static abstract class EventFinderBuilder<C extends EventFinder<?>, B extends EventFinderBuilder<C, B>> {
public B accountId(String accountId) {
log.trace("Account ID: %1s".formatted(accountId));
this.accountId = accountId;
return self();
}
}
}
一直在尝试让
@SuperBuilder
使用它,但没有成功,
我正在重写一些构建器方法以包含日志,这非常有效,
编译输出:
error: wrong number of type arguments; required 2
@SuperBuilder
^
我可以通过从类中删除抽象方法并简单地在子类中实现它来做到这一点,但我想在这里声明它,因为这是父类。
尝试使用@SuperBuilder参数,没有任何帮助,尝试删除抽象方法,这有效,但没有解决问题。
正如
SuperBuilder
的文档所解释的,您无法手写构建器的部分内容。它太复杂了,这就是为什么你做不到。
如果你绝对坚持,请删除手写的
EventFinderBuilder
,将结果通过delombok(java -jar lombok.jar delombok
)抛出,仔细研究非常,然后手卷东西。请注意,不建议这样做。最终,想要构建器的复杂性能够通过自定义花哨功能跨类型层次结构进行构建,这超出了 lombok 的“使样板不那么烦人”的目标,因为此时它不再是样板。