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的超类。