繁体   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