4

以下代码:

public void addGrillaListener(Stage stageToClose,Grilla listener)
{
    GrillaHandler<WindowEvent> handy = new GrillaHandler<>(listener);
    if(stageToClose!=null)
    {
        stageToClose.addEventHandler(WindowEvent.WINDOW_HIDDEN,handy);
    }
}

导致编译器显示该消息。我怎样才能避免它?

额外信息:

  • Grilla 是一个舞台界面
  • GrillaHandler 是一个 EventHandler 子类,它采用 Grilla 作为构造函数参数
  • 使用 JDK 7,允许使用 GrillaHandler<>
  • 编译器消息相当不具体 - 它指出此方法使用未经检查或不安全的操作
  • Stage 是 oracle 提供的一个类,它是 javafx 的一部分

GrillaHandler:

public class GrillaHandler<T> implements EventHandler {

    private Grilla win;

    public GrillaHandler(Grilla win) {
        this.win=win;
    }

    @Override
    public void handle(Event t) {
        win.loadTable();
    }
}

格里拉:

public interface Grilla { 
    public void loadTable();
}
4

1 回答 1

8

将代码更改为

public class GrillaHandler<T extends Event> implements EventHandler<T>{ 
//...
}

JavaFX EventHandler是一种参数化类型。您在声明中缺少该GrillaHandler. 您被迫在类声明中提供类型参数或重新声明类型参数,正如您似乎根据声明所要求的那样。

于 2013-01-10T04:11:54.150 回答