2012-03-04 107 views
0

我有一個類BaseButton的兩種格式:BaseButton <E>和BaseButton <E擴展BaseButton <E>>有什麼區別?

public abstract class BaseButton<E extends BaseButton<E>> extends JXButton implements Initializer { 

    private static final long serialVersionUID = 11L; 

    public BaseButton() { 
     LibraryLogger.initMessage(ClassUtils.getInstance().getResolvedClassName(this.getClass())); 
     initialize(); 
    } 

    public abstract void initialize(); 
} 

和:

public abstract class BaseButton<E> extends JXButton implements Initializer { 

    private static final long serialVersionUID = 11L; 

    public BaseButton() { 
     LibraryLogger.initMessage(ClassUtils.getInstance().getResolvedClassName(this.getClass())); 
     initialize(); 
    } 

    public abstract void initialize(); 
} 

而且我創建子類如:

public class GreenButton extends BaseButton<GreenButton> { 

} 

我的問題是,是什麼區別這兩種類型的通用符號?

哪一個更好?爲什麼?

任何信息對我都很有幫助。

謝謝。

+0

我很努力地在這裏看到樹木...我是否認爲你的問題是「BaseButton 和BaseButton >之間有什麼區別?」?如果是這樣,你能編輯它嗎? – richvdh 2012-03-04 13:15:55

回答

2

隨着您提供的代碼,它沒有區別。

但是,當您開始使用通用類型E時,那時您就會開始發現差異。 在第一個示例中,E將具有BaseButton的所有方法和成員。所以,如果BaseButton有一個方法int foo(String s),你就可以說:

int bar(E arg) { 
    arg.foo("test"); 
} 

如果你嘗試用第二個例子一樣的東西,編譯器會報告錯誤,因爲E隱含延伸ObjectObject不有一個foo方法。

+0

+1感謝您的真棒解釋和示例。 – 2012-03-04 13:24:21

相關問題