JavaFX构建器/ Java泛型

时间:2012-05-04 10:22:28

标签: generics javafx-2

我想重新使用Builder实例来创建几个控件,但是我遇到了我不理解的编译错误。我认为他们是由于我不能正确理解泛型。有人可以帮忙吗?

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<ActionEvent>

我得到的错误是

error: cannot find symbol
    Button button1 = builder.onAction(clickHandler).build();
                                                   ^
symbol:   method build()
location: class ButtonBaseBuilder

ButtonBaseBuilder实现了Builder,所以它应该有一个build()方法,不应该吗?此外,如果我一起运行所有东西(如在button2中),那就没关系。

这是在JDK 7.0u4和JavaFX SDK 2.1

提前致谢, 皮特

2 个答案:

答案 0 :(得分:2)

ButtonBaseBuilder没有build方法。 ButtonBuilderextends ButtonBaseBuilder,因为implements Builder<Button>而有一个{。}}。

这应该有效:

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

答案 1 :(得分:2)

您需要传递ButtonBuilder泛型参数以使用构建器:

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