extendsではなく、compositionを使用します(つまり、Javaのextendsキーワードへの参照のように、extendsを意味し、これは継承です)。構成は実装を完全にシールドするため優れています。クラスのユーザーに影響を与えることなく実装を変更できます。
私はこのようなものを試すことをお勧めします(このウィンドウに直接入力しているので、購入者は構文エラーに注意してください):
public LimitedSizeQueue implements Queue
{
private int maxSize;
private LinkedList storageArea;
public LimitedSizeQueue(final int maxSize)
{
this.maxSize = maxSize;
storageArea = new LinkedList();
}
public boolean offer(ElementType element)
{
if (storageArea.size() < maxSize)
{
storageArea.addFirst(element);
}
else
{
... remove last element;
storageArea.addFirst(element);
}
}
... the rest of this class
(Asafの回答に基づく)より良いオプションは、Apache Collections CircularFifoBufferをジェネリッククラスでラップすることです。例えば:
public LimitedSizeQueue<ElementType> implements Queue<ElementType>
{
private int maxSize;
private CircularFifoBuffer storageArea;
public LimitedSizeQueue(final int maxSize)
{
if (maxSize > 0)
{
this.maxSize = maxSize;
storateArea = new CircularFifoBuffer(maxSize);
}
else
{
throw new IllegalArgumentException("blah blah blah");
}
}
... implement the Queue interface using the CircularFifoBuffer class
}