【发布时间】:2023-01-10 23:17:00
【问题描述】:
这个想法是在.build()时间填充summary。
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@Data
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class Book
{
protected String title;
protected String author;
protected String description;
}
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.SuperBuilder;
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
public class BookSummary extends Book
{
public String summary;
public BookSummary(BookSummaryBuilder<?, ?> b)
{
super(b);
this.summary = getTitle() + getAuthor() + getDescription();
}
}
一切正常,但我想知道是否有更简单/更优雅的方法来做同样的事情而不需要创建这个构造函数
更新
我不能简单地覆盖 summary get 方法,因为一些将接收此对象作为参数的 API 不使用访问器从字段中检索值。
例如:
public class BookSummary extends Book
{
@Builder.Default
public String summary = "xxxxxxxxxxxxxxx";
public String getSummary()
{
return getTitle() + getAuthor() + getDescription();
}
}
BookSummary bookSummary = BookSummary.builder()
.title("Java forever")
.author("John John")
.description("bla-bla-bla-bla")
.build();
String json = new GsonBuilder().create().toJson(bookSummary)
JSON:
{
"summary":"xxxxxxxxxxxxxxx",
"title":"Java forever",
"author":"John John",
"description":"bla-bla-bla-bla"
}
【问题讨论】:
-
没有那个构造函数它工作正常,你测试了吗?
-
创建
getSummary方法并在那里,this.summary = getTitle() + getAuthor() + getDescription(); -
@YoucefLAIDANI - 在没有构造函数的情况下将在哪个时刻填充摘要?
-
@AbhijitSarkar - 我更新了帖子以解释为什么创建 getSummary 在我的情况下不起作用