我正在讀一本書中作者用這樣混亂實施
public class Pool<T> {
public interface PoolObjectFactory<T> {
public T createObject();
}
private final List<T> freeObjects;
private final PoolObjectFactory<T> factory;
private final int maxSize;
public Pool(PoolObjectFactory<T> factory, int maxSize) {
this.factory = factory;
this.maxSize = maxSize;
this.freeObjects = new ArrayList<T>(maxSize);
} //end of constructor
} //end of class Pool<T>
代碼的接口然後,他使用的代碼是這樣的
PoolObjectFactory<KeyEvent> factory = new PoolObjectFactory<KeyEvent>() {
@Override
public KeyEvent createObject() {
return new KeyEvent();
} //end of createObject()
};
keyEventPool = new Pool<KeyEvent>(factory, 100);
我想問在該行PoolObjectFactory<KeyEvent> factory = new PoolObjectFactory<KeyEvent>() {..};
他沒有說implements PoolObjectFactory
。爲什麼?當你使用接口,那麼你使用implements
關鍵字?
感謝
你的意思是聲明'new PoolObjectFactory(){..}'意味着'創建並同時實例化一個名爲PoolObjectFactory的新類,它實現了接口PoolObjectFactory'。意思是我可以使用新的'Basit (){...}'。但是,如果在類體中我重寫該方法,則Basit類僅實現PoolObjectFactory。如果我不覆蓋該方法,那麼這意味着我只是創建並實例化一個新類,但它沒有實現任何接口。最後,將新創建的類實例分配給變量'Basit factory ='。我對嗎 ? –
Basit
不,不是。首先你創建一個匿名類 - 這是一個沒有名字的類,但是,你確實要實例化它。你不能實例化一個沒有實現方法的類,所以我不太瞭解你的語句的第二部分。 –
我的意思是匿名類實現接口,因爲我重寫類體中的方法。假設我使用了這樣的'PoolObjectFactory factory = new PoolObjectFactory (){public int i = 2;}';請參閱類體中的重寫方法。這個類是否也實現了PoolObjectFactory接口?我可以使用類似'{public int i = 2; public PoolObjectFactory(){}}}; ? –
Basit