当指定类型时,javac"使用未经检查或不安全的操作"

Alv*_*aro 4 java types casting interface

以下代码:

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

导致编译器显示该消息.我怎么能避免呢?

额外信息:

  • 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

格里拉:

public interface Grilla { 
    public void loadTable();
}
Run Code Online (Sandbox Code Playgroud)

Edw*_*rzo 8

将代码更改为

public class GrillaHandler<T extends Event> implements EventHandler<T>{ 
//...
}
Run Code Online (Sandbox Code Playgroud)

JavaFX EventHandler是一种paremeterized类型.你在宣言中遗漏了那一个GrillaHandler.您被迫在类声明中提供类型参数或重新声明类型参数,因为您似乎需要根据您的声明.

  • +1出色的侦探工作!糟糕的是,选民已经继续前进。 (2认同)