大型构建器是我项目的核心,并且使用非常频繁。我想让每个方法中的每个参数都是动态的(期望 lambda 表达式作为参数)。然而,我需要创建两次以上的方法(甚至更多),但是我的构建器类已经太大了,当我向其中添加另一个方法时,我不想浪费时间。
我想对方法进行类似 lombok 注释的操作,以使方法能够同时接收
Supplier<T>
和 T
类型参数。当它调用某些方法时,它应该从供应商那里获取值,或者从对象中获取字段。
应该是这样的
@DynamicArguments
public void randFunc(String string, Integer value) {
// some code
}
randFunc("word", 1) // works
randFunc(() -> "123546", 3) // works
randFunc(() -> "123456", () -> 8) // works
我尝试研究 groovy 和自定义 lombok 注释来做到这一点,但没有多大帮助。
我会使用参数构建器类。
public static class RandFuncArgs {
private Supplier<String> string;
private IntSupplier value;
public RandFuncArgs() {
string("");
value(0);
}
public RandFuncArgs(String s,
int value) {
string(s);
value(value);
}
public String getString() {
return s.get();
}
public int getValue() {
return value.getAsInt();
}
public RandFuncArgs string(String s) {
return string(() -> s);
}
public RandFuncArgs string(Supplier<String> s) {
this.string = Objects.requireNonNull(s, "Argument cannot be null.");
return this;
}
public RandFuncArgs value(int value) {
return value(() -> value);
}
public RandFuncArgs value(IntSupplier value) {
this.value = Objects.requireNonNull(value, "Argument cannot be null.");
return this;
}
}
现在你的外部类只需要一种方法:
public void randFunc(RandFuncArgs args) {
// ...
}
其他人可以称之为:
obj.randFunc(new RandFuncArgs().string("word").value(1));
obj.randFunc(new RandFuncArgs().string(() -> "123546").value(3));
obj.randFunc(new RandFuncArgs().string(() -> "123456").value(() -> 8));