Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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
Generics javafxbuilders/Java泛型_Generics_Javafx 2 - Fatal编程技术网

Generics javafxbuilders/Java泛型

Generics javafxbuilders/Java泛型,generics,javafx-2,Generics,Javafx 2,我想重新使用一个构建器实例来创建几个控件,但是我得到了一些编译错误,我不理解这些错误。我想这是因为我没有正确理解泛型。有人能帮忙吗 ButtonBuilder builder = ButtonBuilder.create().minHeight(40.0).minWidth(40.0); Button button1 = builder.onAction(clickHandler).build(); // Error Button button2 = ButtonBuilder.create()

我想重新使用一个构建器实例来创建几个控件,但是我得到了一些编译错误,我不理解这些错误。我想这是因为我没有正确理解泛型。有人能帮忙吗

ButtonBuilder builder = ButtonBuilder.create().minHeight(40.0).minWidth(40.0);
Button button1 = builder.onAction(clickHandler).build(); // Error
Button button2 = ButtonBuilder.create().minHeight(40.0).minWidth(40.0).onAction(clickHandler).build(); //OK
其中clickHandler是一个
EventHandler

我得到的错误是

error: cannot find symbol
    Button button1 = builder.onAction(clickHandler).build();
                                                   ^
symbol:   method build()
location: class ButtonBaseBuilder
ButtonBaseBuilder实现了Builder,所以它应该有一个build()方法,不是吗?同样,如果我把所有的东西都放在一起运行(如按钮2),也没关系

这是在JDK 7.0u4和JavaFX SDK 2.1上实现的

提前感谢,,
Pete

按钮BaseBuilder
没有
生成方法
ButtonBuilder
,它扩展了ButtonBaseBuilder
,因为它实现了Builder

这应该起作用:

Button button1 = ((ButtonBuilder) builder.onAction(clickHandler)).build();

ButtonBaseBuilder
没有
build
方法
ButtonBuilder
,它扩展了ButtonBaseBuilder,因为它实现了Builder

这应该起作用:

Button button1 = ((ButtonBuilder) builder.onAction(clickHandler)).build();

您需要传递ButtonBuilder泛型参数才能以这种方式使用生成器:

    ButtonBuilder<? extends ButtonBuilder> builder =
                     ButtonBuilder.create().minHeight(40.0).minWidth(40.0);
    Button button1 = builder.onAction(clickHandler).build(); 

ButtonBuilder您需要传递ButtonBuilder泛型参数才能以这种方式使用生成器:

    ButtonBuilder<? extends ButtonBuilder> builder =
                     ButtonBuilder.create().minHeight(40.0).minWidth(40.0);
    Button button1 = builder.onAction(clickHandler).build(); 

是的,我第一次错过了。建设者处于一个层次结构中,只有“提示”实现了构建OK,是的,我第一次错过了。建设者在一个层次结构中,只有“提示”实现了建设者谢谢!我想我明白了;将泛型参数添加到ButtonBuilder的类型中会告诉编译器“记住”其类型(通过推理)——如果没有泛型参数,XXXBuilder方法将返回自己的类型,即ButtonBuilder的超类。谢谢!我想我明白了;将泛型参数添加到ButtonBuilder的类型中会告诉编译器“记住”其类型(通过推理)——如果没有泛型参数,XXXBuilder方法将返回自己的类型,即ButtonBuilder的超类。