Java如何在构造函数中将接口作为参数传递?

时间:2013-08-17 10:20:23

标签: java gwt

我正在创建一个已在GWT Showcase中使用的Composite小部件。

new DialogBoxWidget(constants);

//我在这里遇到错误:构造函数DialogBoxWidget(ShowcaseConstants)未定义。

/**
* Constants used throughout the showcase.
*/
public interface ShowcaseConstants extends MenuConstants,       
CwDialogBox.CwConstants{
     /**
      * The path to source code for examples, raw files, and style definitions.
      */
  String DST_SOURCE = "gwtShowcaseSource/";
}

这是我的DialogBoxWidget.java是Composite

 @ShowcaseSource
public static interface CwConstants extends Constants {
    String cwDialogBoxCaption();

    String cwDialogBoxClose();

    String cwDialogBoxDescription();

    String cwDialogBoxDetails();

    String cwDialogBoxItem();

    String cwDialogBoxListBoxInfo();

    String cwDialogBoxMakeTransparent();

    String cwDialogBoxName();

    String cwDialogBoxShowButton();
}

/**
 * An instance of the constants.
 */
@ShowcaseData
private final CwConstants constants;

/**
 * Constructor.
 * @param constants2 
 *
 * @param constants the constants
 */
public DialogBoxWidget(CwConstants constants) {

    // Add a hyper link to each section in the Widgets category
    ShowcaseConstants allConstants = GWT.create(ShowcaseConstants.class);
    this.constants = constants;
    // Create the dialog box
    final DialogBox dialogBox = createDialogBox();
    dialogBox.setGlassEnabled(true);
    dialogBox.setAnimationEnabled(true);

    // Create a button to show the dialog Box
    Button openButton = new Button(
            allConstants.cwDialogBoxShowButton(), new ClickHandler() {
                public void onClick(ClickEvent sender) {
                    dialogBox.center();
                    dialogBox.show();
                }
            });

    // Create a ListBox
    HTML listDesc = new HTML(
            "<br><br><br>" + allConstants.cwDialogBoxListBoxInfo());

    ListBox list = new ListBox();
    list.setVisibleItemCount(1);
    for (int i = 10; i > 0; i--) {
        list.addItem(allConstants.cwDialogBoxItem() + " " + i);
    }

    // Add the button and list to a panel
    VerticalPanel vPanel = new VerticalPanel();
    vPanel.setSpacing(8);
    vPanel.add(openButton);
    vPanel.add(listDesc);
    vPanel.add(list);
    initWidget(vPanel);
}

以下是onModuleLoad()

的代码
ShowcaseConstants constants = GWT.create(ShowcaseConstants.class);
 @ShowcaseSource
public void onModuleLoad() {

    DialogBoxWidget dialogBox = new DialogBoxWidget(constants);//Here I am stucked with error : The constructor DialogBoxWidget(ShowcaseConstants) is undefined
    //Add it to the RootPanel.
    RootPanel.get().add(dialogBox);
}

2 个答案:

答案 0 :(得分:2)

将构造函数更改为

public DialogBoxWidget(ShowcaseConstants  constants) {

您指导接受CwConstants

public DialogBoxWidget(CwConstants constants) {

您正试图通过ShowcaseConstants

或创建

CwConstants constants = GWT.create(CwConstants.class);

并传递此信息。

答案 1 :(得分:0)

我敢打赌你的重构/复制粘贴错误:ShowcaseConstants扩展CwDialogBox.CwConstants而不是DialogBoxWidget.CwConstants