Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';s BaseButton与lt;E>;和基本按钮<;E按钮<;E>>;?_Java_Generics_Inheritance - Fatal编程技术网

Java 什么';s BaseButton与lt;E>;和基本按钮<;E按钮<;E>>;?

Java 什么';s BaseButton与lt;E>;和基本按钮<;E按钮<;E>>;?,java,generics,inheritance,Java,Generics,Inheritance,我有两种格式的类BaseButton: public abstract class BaseButton<E extends BaseButton<E>> extends JXButton implements Initializer { private static final long serialVersionUID = 11L; public BaseButton() { LibraryLogger.initMessage(Cl

我有两种格式的类
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();
}
公共抽象类BaseButton扩展JXButton实现初始值设定项{
私有静态最终长serialVersionUID=11L;
公共基本按钮(){
LibraryLogger.initMessage(ClassUtils.getInstance().getResolvedClassName(this.getClass());
初始化();
}
公共抽象空初始化();
}
以及:

公共抽象类BaseButton扩展JXButton实现初始值设定项{
私有静态最终长serialVersionUID=11L;
公共基本按钮(){
LibraryLogger.initMessage(ClassUtils.getInstance().getResolvedClassName(this.getClass());
初始化();
}
公共抽象空初始化();
}
我正在创建子类,如下所示:

public class GreenButton extends BaseButton<GreenButton> {

}
公共类绿色按钮扩展BaseButton{
}
我的问题是这两种类型的泛型符号有什么区别

哪一个更好,为什么

任何信息都会对我很有帮助


谢谢。

对于您提供的代码,没有任何区别

但是,当您开始使用泛型类型
E
时,您将开始看到差异。 在第一个示例中,
E
将包含
BaseButton
的所有方法和成员。因此,如果
BaseButton
有一个方法
intfoo(String s)
,您将能够说:

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

如果您在第二个示例中尝试相同的操作,编译器将报告一个错误,因为
E
隐式扩展了
Object
,而
Object
没有
foo
方法。

我正努力在这里看到树木的树木。。。我认为你的问题是“BaseButton和BaseButton有什么区别”对吗?如果可以的话,你能把它编辑成这样吗?
int bar(E arg) {
    arg.foo("test");
}