我有两种格式的类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> {
}
我的问题是这两种通用符号之间的区别是什么?
哪一个更好,为什么?
任何信息都对我很有帮助。
感谢。
答案 0 :(得分:2)
使用您提供的代码,没有任何区别。
但是,当您开始使用泛型类型E
时,那就是您何时开始看到差异。
在第一个示例中,E
将包含BaseButton
的所有方法和成员。因此,如果BaseButton
有方法int foo(String s)
,您可以说:
int bar(E arg) {
arg.foo("test");
}
如果您对第二个示例尝试相同的操作,编译器将报告错误,因为E
隐式扩展Object
而Object
没有foo
方法