2014-02-13 89 views
1

我明白如何使用Comparable<T>接口,但在這個特定的例子中,我想知道是否有辦法要求從抽象類(它實現了Comparable<T>接口)繼承類,與其自身相當。摘要繼承形式的可比接口

讓我再次重申,有可能實現可比接口的抽象類:

public abstract class MyAbstractClass implements Comparable<MyAbstractClass> 

和從該抽象類繼承的類:

public class MyClass extends MyAbstractClass 
這種設置

通常情況下,以下方法來滿足可比接口:

public int compareTo(MyAbstractClass otherAbstractObject) 

這需要我做出以下轉換:

public int compareTo(MyAbstractClass otherAbstractObject) 
{ 
    MyClass otherObject = (MyClass) otherAbstractObject; 

    // Comparison... 
    return result; 
} 

鑑於這個轉換很容易被欲以MyAbstractClass不同的孩子失敗了,我希望能夠定義我的抽象類接受以下方法:

public int compareTo(MyClass otherMyObject) 
{ 
    // Comparison... 
    return result; 
} 

有關如何完成此任務的想法?或者它根本不可能?

回答

3

可以使用泛型來定義它。您可以定義MyAbstractClass如下:

public abstract class MyAbstractClass<T extends AbstractClass<T>> 
    implements Comparable<T> 

然後你就可以定義子類,如

public class MyClass extends MyAbstractClass<MyClass> 

,允許您定義compareTo方法是這樣的:

public int compareTo(MyClass otherMyClass) 

然而,沒有按不要阻止任何人寫出不符合該模式的子類:

public class SneakyClass extends MyAbstractClass<MyClass> 

這也將定義compareTo方法類似:

public int compareTo(MyClass otherMyClass) 

注:有什麼可以強制類的泛型類型參數等於上它定義的類;你所能做的最好的事情是強制抽象類的上限,至少強制它是某種MyAbstractClass