2017-05-05 95 views
4

我有一個類成員,它是我的課的類型,像一個鏈表:如何獲得編譯時參考當前的類實例

class MyLinkedList { 
    ... 
    public MyLinkedList next; 
    ... 
} 

當我擴展此類

class MyExtendedLinkedList extends MyLinkedList{ 
    ... 
    public doStuff(){ 
    ... 
    } 
} 

我不能這樣做

MyExtendedLinkedList myExLL = ...//Get some somewhere 
myExLL.next.doStuff(); 

由於next不返回實例。顯然,這可以通過類型轉換來完成,但是是否存在編譯時類型的安全方法來聲明next,以便我可以獲取所有派生類的派生類型?

回答

3
class MyLinkedList<T extends MyLinkedList<T>> { 
    public T next; 
} 

class MyExtendedLinkedList extends MyLinkedList<MyExtendedLinkedList> { 
    ... 
} 

但是,請注意,您不能擴展MyExtendedLinkedList並有此技巧;這隻適用於直接從MyLinkedList開始並按照上述方法進行自我參照的仿製藥。

+0

如果需要擴展'MyExtendedLinkedList',我該如何調整? – uberhaxed

+0

你可能會放棄類型安全。嚴重的是,這是非常困難的工作。 –

+0

@LouisWasserman我不明白可能的困難。你能澄清一下嗎? –