我研究了一下,我不确定这一点。
我有一个需要返回一堆数据的进程。我将数据放在Result类中:
public final class Result implements Serializable {
/** Inmmutable class
*
*/
private static final long serialVersionUID = -916675731077365794L;
private final String nick;
private final LocalDateTime date_init;
private final LocalDateTime date_end;
private final double profit;
private final double tax;
private final Double balance;
private final int inputs;
private final List<CustomObjects> inputs_by_month;
// Keep going...
// constructor
Results(String nick, LocalDateTime date_init, LocalDateTime date_end,
double profit, double tax/* Keep going... */) {
super();
this.nick = nick;
this.date_init = date_init;
this.date_end = date_end;
this.profit = profit;
this.tax = tax;
/* Keep going... */
}
/* getters here */
}
我不确定如何创建这个对象。是的,我可以使用Factory类
public final class ResultFactory {
private String nick;
private LocalDateTime date_init;
private LocalDateTime date_end;
private double profit;
private double tax;
private Double balance;
private int inputs;
private List<CustomObjects> inputs_by_month;
// Keep going...
public Result getResult()
{
return Result(nick,date_init,date_end,/*...*/);
}
public void setNick(String nick)
{
this.nick = nick;
}
public void setDateInit(LocalDateTime date_init){
this.date_init = date_init;
}
/* ... */
}
但我复制了整个结构。看起来不对劲。
我正在寻找一个不可变类中的商店数据模式。
你可以做的是将你的Result
课分成更多课程。
public class Result {
private final String nick;
private final LocalDateTime date_init;
private final LocalDateTime date_end;
private final MonetaryResult monetaryResult;
private final InputsResult inputsResult;
Results(String nick, LocalDateTime date_init, LocalDateTime date_end, MonetaryResult monetaryResult, InputsResult inputsResult) {
...
this.monetaryResult = monetaryResult;
this.inputsResult = inputsResult;
...
}
}
这样,您可以避免使用具有许多属性的类,这使得构造变得困难。
您可以像这样构造结果对象。
new Restult(
"nick",
createDate(),
createDate(),
new MonetaryResult(...),
...
)
您可以使用Lombok @Value
和@Builder
注释:
@Builder
@Value
public final class Result implements Serializable {
String nick;
LocalDateTime date_init;
LocalDateTime date_end;
double profit;
double tax;
Double balance;
int inputs;
List<CustomObjects> inputs_by_month;
// Keep going...
}
龙目岛将为您生成:
private final
关键字toString
,equals
和hashCode
方法Result.builder().nick("foo").build()
构建对象)