我有一个带有属性SubMessage的AutoValue,也是一个AutoValue。顶层AutoValue有一个Builder,允许您使用set(SubMessage)设置AutoValueSubMessage属性。然而,当我声明set(SubMessage.Builder)时,会出现编译错误。但是,由于get()返回SubMessage而不是SubMessage.Builder,因此存在编译错误。我做得不对吗?有什么建议吗?
值得注意的是,我试图避免定义这样的非抽象方法:
public MainMessage.Builder setSubMessage(SubMessage.Builder builder) {
  setSubMessage(builder.build());
  return this;
}
AutoValue的目标之一是删除尽可能多的样板,这就是为什么我试图弄清楚AutoValue是否会自动生成我需要的代码。
示例如下:
@AutoValue
  public abstract static class MainMessage {
    public static Builder builder() {
      return new AutoValue_MainClass_MainMessage.Builder();
    }
    public abstract SubMessage subMessage();
    public abstract Builder toBuilder();
    /** Builder for MainMessage. */
    @AutoValue.Builder
    public abstract static class Builder {
      public abstract Builder setSubMessage(SubMessage value);
      public abstract Builder setSubMessage(SubMessage.Builder value);
      public abstract SubMessage.Builder subMessageBuilder();
      public abstract MainMessage build();
    }
  }
  @AutoValue
  public abstract static class SubMessage {
    public static Builder builder() {
      return new AutoValue_MainClass_SubMessage.Builder();
    }
    public abstract int someValue();
    public abstract Builder toBuilder();
    /** Builder for SubMessage. */
    @AutoValue.Builder
    public abstract static class Builder {
      public abstract Builder setSomeValue(int value);
      public abstract SubMessage build();
    }
  }
错误:
[AutoValueGetVsSet] Parameter type MainClass.SubMessage.Builder of setter method should be com.google.sandbox.MainClass.SubMessage to match property method com.google.sandbox.MainClass.MainMessage.subMessage()
      public abstract Builder setSubMessage(SubMessage.Builder value);