我有以下任务
public class Event {
private final Integer id;
private final Collection<Market> market;
private final Boolean completed;
public Event(Integer id,
Collection<Market> market, Boolean completed) {
this.id = id;
this.market = market;
this.completed = completed;
}
public Integer getId() {
return id;
}
public Boolean getCompleted() {
return completed;
}
}
public class Market {
private final Integer marketId;
public Market(Integer marketId) {
this.marketId = marketId;
}
public Integer getMarketId() {
return marketId;
}
}
public interface Client
{
public void addEvent(Event event);
/**
* Update event status to completed.
*/
public void eventCompleted(Integer id);
/**
* Add market to an existing event
*/
public void attachMarketToEvent(Integer id, Market market);
/**
* Remove market from an existing event
*/
public void removeMarketFromEvent(Integer id, Market market);
}
我需要在不更改Event或Market类的情况下实现客户端。 怎么做?有任何想法吗?我可以实现它,但如果我改变这个最后的字段。 对我有什么期望?我真的很惊讶。
答案 0 :(得分:1)
Event
是不可变的。也就是说,一旦创建它就无法更改。查看Client
接口,似乎唯一出现问题的方法是eventCompleted
方法:
/**
* Update event status to completed.
*/
public void eventCompleted(Integer id);
看起来此方法希望您将completed
的{{1}}标志更新为true,这是不可能的。
其他方法不会成为问题,因为它们不会修改Event
的字段:
Event
:这应该不是问题,因为始终可以创建新事件addEvent(Event event)
和attachMarketToEvent(Integer id, Market market)
:这些不应该是一个问题,因为它们将用于向removeMarketFromEvent(Integer id, Market market)
集合中添加新对象。您需要回到期望您实施客户端的任何人并询问他们:如果market
是不可变的,我如何更新completed
字段?