[英]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
隱式擴展Object
和Object
沒有foo
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.