翻看Vector代碼的時候,看到這麼一段。java
/** * Returns an enumeration of the components of this vector. The * returned {@code Enumeration} object will generate all items in * this vector. The first item generated is the item at index {@code 0}, * then the item at index {@code 1}, and so on. * * @return an enumeration of the components of this vector * @see Iterator */ public Enumeration<E> elements() { return new Enumeration<E>() { int count = 0; public boolean hasMoreElements() { return count < elementCount; } public E nextElement() { synchronized (Vector.this) { if (count < elementCount) { return elementData(count++); } } throw new NoSuchElementException("Vector Enumeration"); } }; }
Enumeration是個接口,內部定義此處不綴述。this
此處用到了這種new接口的使用方法,若是有些場合,只須要臨時須要建立一個接口的實現類,上面的"技巧"能夠用來簡化代碼.
在結合接口內部的方法設定,便可實現強大的處理方式,而省去不少單獨處理邏輯問題。
咱們在仔細看,會發現實現的接口實例中並無elementCount,而elementCount是在Vector中定義的,那麼若是調用該方法,返回一個接口實例,在使用該接口實例的時候,如何獲取到該值?
因而寫一個demo查看下,
會發現返回的實例裏面維護了一個包含v實例成員變量的實例指向。因此在其方法實現裏面能夠使用到該值。(至於其如何實現的爲探究,讀到此文知道的讀者能夠留言,謝謝)設計
那麼會想,是否返回一個對象都會封裝一個此類指向呢,能夠本身按照此種方式寫一個試試。3d
Car是一個接口,按照上述方式模式實現的,存在上述所說引用;Student並無。code
總結:component
一、適當的時候巧用返回接口實例方式,可結合模式方式實現某種功能簡化;對象
二、是否能夠利用其引用處理某些問題,什麼樣的修飾符的成員變量能被引用對象實現,這種設計的初衷考慮哪些等等,值得神經的時候思考下。blog
三、另外new 接口方式能夠當作參數傳遞。如t.inject(new Car(){接口
接口實現方法;element
});