我有一個實現接口的類。還有另外一個類實現了這個接口,這個第二類的實例支持我的類的實現。如何減少委託樣板文件?
對於接口指定的許多方法,我的類只是將它們直接轉發給第二類。
public class MyClass implements MyInterface
{
private OtherClass otherClassInstance; // Also implements MyInterface.
// ...
void foo() { otherClassInstance.foo(); }
void bar() { otherClassInstance.bar(); }
void baz() { otherClassInstance.baz(); }
// ...
}
只需從第二類派生我的課就消除了這一切,但它沒有任何意義,因爲這兩個類是彼此無關(除了實現通用接口)。它們代表了不同的東西 - 恰恰相反,我的課程的很多實現複製了其他課程的實施。換句話說,我的課程是在第二課堂上實施的,但它本身並不是第二課程的一部分。正如我們所知,繼承意味着表達一種「是 - 一種」的關係,而不是共享實現,所以在這種情況下它是不合適的。
This約書亞布洛赫談話的一部分很好地說明了這種情況。
我知道Java對代表團沒有任何語言支持。但是,至少有一些方法來清理我的類的實現,所以它不是多餘的?
讓我們直...你想擴展ArrayList,但不是在任何情況下,但一個接口不會削減它... 它你的'MyList'下降到主要是ArrayList那麼它真的會有意義擴展ArrayList,並相應地處理非數組列表。 – Shark
通常我會檢查「MyList」的原因。大多數情況下,它是一個ArrayList,在某些情況下我需要特殊的行爲。對於這種情況,我使用ArrayList並構建Wrapper/Adapter /命令來提供功能。大部分時間我都會查看番石榴,並免費獲得所需的延期。 –
@Shark不,我不想擴展'ArrayList'。我讓我自己的類實現'List','ArrayList'成員只支持我的實現。它對* MyList對象用來代替'ArrayList'對象是沒有意義的 - 永遠不會。 – Maxpm