实现客户端提供的接口

Implementing an interface provided by a Client

我有以下任务

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 是不可变的。也就是说,一旦创建就无法更改。查看 Client 接口,唯一似乎有问题的方法是 eventCompleted 方法:

    /**
     * Update event status to completed. 
     */
    public void eventCompleted(Integer id);

看起来此方法希望您将 Eventcompleted 标志更新为 true,这是不可能的。

其余方法不会有问题,因为它们不会修改 Event 的字段:

  1. addEvent(Event event) :这应该不是问题,因为总是可以创建新事件
  2. attachMarketToEvent(Integer id, Market market)removeMarketFromEvent(Integer id, Market market) :这些应该不是问题,因为它们将用于将新对象添加到允许的 market 集合中。

您需要回到希望您实施客户端的人那里并询问他们:如果 Event 是不可变的,我如何更新 completed 字段?