2013-01-10 22 views
3

以下代码:javac的“使用未经检查或不安全的操作”时,被指定的类型

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

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

额外的信息:

  • 格里拉是Stage界面
  • GrillaHandler是一个事件处理程序子类,它需要一个格里拉作为构造参数
  • 使用JDK 7,GrillaHandler <>允许
  • 的编译器的消息是相当unespecific - 它指出,此方法使用未经检查或不安全的操作
  • 舞台是Oracle提供的一个类,它是

GrillaHandler的JavaFX的一部分:

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

显示在该行中的信息? –

+2

对我来说,问题出现在参数'Stage stageToClose'中。它看起来像是一个参数化类型,以便稍后可以接受特定类型的事件处理程序。但是在你的代码中并不明显。你可以发布'Stage'和'Grilla'的定义吗? –

+1

GrillaHandler 得心应手=新GrillaHandler (受听者); – Deepak

回答

5

更改代码

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

JavaFX的EventHandler是paremeterized类型。您在GrillaHandler的声明中遗漏了那一个。您必须在您的类声明中提供类型参数,或者重新声明类型参数,因为您似乎需要按照您的声明。

+1

+1尼斯侦探的申报工作给予!投票移动已经过去,这太糟糕了。 –

+0

Niceeeee!我在稍后尝试 – Alvaro

相关问题