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 上

在此先感谢,皮特

4

2 回答 2

2

ButtonBaseBuilder没有build方法。ButtonBuilder,其中extends ButtonBaseBuilder,有一个是因为它implements Builder<Button>

这应该有效:

Button button1 = ((ButtonBuilder) builder.onAction(clickHandler)).build();
于 2012-05-04T10:39:07.720 回答
2

您需要传递 ButtonBuilder 通用参数才能以这种方式使用构建器:

    ButtonBuilder<? extends ButtonBuilder> builder =
                     ButtonBuilder.create().minHeight(40.0).minWidth(40.0);
    Button button1 = builder.onAction(clickHandler).build(); 
于 2012-05-04T11:00:51.923 回答