我有以下代码
public class ComplicatedBuilder extends MyBuilder
{
public final Parameter<ComplicatedBuilder, Long> par1 = new Parameter<>(this);
public final Parameter<ComplicatedBuilder, Long> par2 = new Parameter<>(this);
...
}
public class Parameter<B extends MyBuilder, T>
{
private T val;
private B builder;
public Parameter(B b)
{
builder = b;
}
public B setValue(T v)
{
val = v;
return builder;
}
...
}
//usage:
ComplicatedBuilder builder = new ComplicatedBuilder();
builder
.par1.setValue(5)
.par2.setValue(7);
我如何声明参数像 public final Parameter<this.class, Long> par1 ...
?我想以允许将参数列表复制粘贴到另一个构建器而无需进行大量更改的方式来执行此操作。
最佳答案
你是这个意思吗?
abstract class AbstractComplicatedBuilder<B extends AbstractComplicatedBuilder<B>>
extends MyBuilder {
public final Parameter<B, Long> par1 = new Parameter<>(self());
public final Parameter<B, Long> par2 = new Parameter<>(self());
abstract B self();
}
class ComplicatedBuilder extends AbstractComplicatedBuilder<ComplicatedBuilder>{
ComplicatedBuilder self(){
return this;
}
}
您可以推迟实际的 AbstractComplicatedBuilder
使用通用参数 B extends AbstractComplicatedBuilder<B>
进行构建.
关于java - 使用 <this.class> 实例化通用字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43584229/