指定类型时 javac "uses unchecked or unsafe operations"

标签 java types interface casting

以下代码:

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的一部分

Grilla处理程序:

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();
}

最佳答案

将代码更改为

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

JavaFX EventHandler是参数化类型。您在 GrillaHandler 的声明中遗漏了那个。您被迫在类声明中提供类型参数或重新声明类型参数,因为您似乎根据声明要求。

关于指定类型时 javac "uses unchecked or unsafe operations",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14250064/

相关文章:

java - android recyclerview 首次启动时未加载

java - 具有所有抽象方法的抽象类和接口(interface)之间有什么区别(不是技术上的)

c# - 接口(interface)和类之间有什么区别,当我可以直接在类中实现方法时为什么要使用接口(interface)?

javascript - typescript :定义没有特定键和链对象的接口(interface)

C# 等效于 Java 的 mkdirs()

java - android - 将图像保存到画廊

java - Micronaut 属性注入(inject)不适用于 Gradle 多项目构建

C# 如何将函数调用保存在内存中供以后调用

list - 列出 Rust 中的不同类型

c# - 在接口(interface)中使用泛型