java - 使用 <this.class> 实例化通用字段

标签 java java-8

我有以下代码

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/

相关文章:

java - 询问 "Update Dependencies from package.json"的对话框提供了 "Run ' npm install'"按钮,*之后* 我已经成功运行我的 Vaadin 14.0.8 应用程序

java - 在 java.util.Date 和 java.time.Instant 之间转换古代日期时出现差异

java - 从 Eclipse 集合 IntList/IntIterable 创建 IntStream 和 Stream<Integer>

Java 8 分组依据和 BigDecimal

java - 为什么我得到不同的 java 版本

java - 为什么此 CompletionStage 代码会导致编译错误?

java - 它是多重继承吗?如果不是,为什么?

java - 通过 Jsoup 使用 IP 和主机

java - 如何使SWT中的任何对象变得模糊?

java - 多级字符串分割