簡體   English   中英

BaseButton有什么區別 <E> 和BaseButton <E extends BaseButton<E> &gt;?

[英]What's the difference between BaseButton<E> and BaseButton<E extends BaseButton<E>>?

我有兩種類型的BaseButton類:

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> {

}

我的問題是這兩種通用符號有什么區別?

哪一個更好,為什么?

任何信息對我都非常有幫助。

謝謝。

使用您提供的代碼,它沒有任何區別。

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

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

如果您對第二個示例嘗試相同的操作,編譯器將報告錯誤,因為E隱式擴展ObjectObject沒有foo方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM