我想编写一个通用的 builder 类,它环绕任何 java 类并提供特定样式的 setter 函数。我不确定这是否可以称为“动态生成的函数”。
当我有一个 beanish Pojo 类时,即
class Pojo {
public void setValue(int value) {...}
public void setName(String name) {...}
}
我的 Maker
类应该像这样使用:
Pojo p = Builder<Pojo>.create(new Pojo())
.setName("Funny")
.setValue(123)
.build();
如你所见,它所做的工作应该类似于
class PojoBuilder {
private Pojo pojo;
PojoBuilder(Pojo pojo) { this.pojo = pojo; }
public static PojoMaker create(Pojo p) { return new PojoBuilder(p); }
public PojoBuilder setName(String name) { pojo.setName(name); return this; }
public PojoBuilder setValue(int val) { pojo.setValue(val); return this; }
public Pojo make() { return pojo; }
}
只是,我希望 Maker
是通用的。显然,“setXyz”-方法取决于通用参数。如何做到这一点?
当然,功能相同但句法不同的方法也可以。
我想在没有注释的情况下执行此操作:使用我收集的注释,我需要对我的源代码进行第二次 javac 传递,以生成包装代码。这似乎是 Limbok 所做的或某些 JPA 包装器 的工作方式。但是当我使用 Mockito 时,似乎没有必要进行此传递。那么,如何使用泛型做到这一点?
最佳答案
最简单的方法是使用 Lombok 库。
@Value
@Builder
public class MessageEvent<T> {
T message;
TypeEnum type;
}
用法是这样的。
MessageEvent<String> messageEvent = MessageEvent.<String>builder().message("test").build();
关于java - 如何使用泛型而不是注释来实现构建器类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24936150/