[英]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.