对象类型解析:instanceof

时间:2014-12-15 19:35:29

标签: java object instanceof

当我尝试编译并运行这部分代码时,我得到了这个错误:

  

线程中的异常" AWT-EventQueue-0" java.lang.Error:未解决的编译问题:       侦听器无法解析为变量

at FormPanel.setFormListener(FormPanel.java:273)
at MainFrame.<init>(MainFrame.java:37)
at App$1.run(App.java:10)

代码是这样的:

//  public void setFormListener(DailyFormListener listener) {
//      this.formDayListener = listener;
//      
//  }
public void setFormListener(Object o) {
    if (o instanceof DailyFormListener) {
        this.formDayListener = listener;
    }
    else if (o instanceof GeneFormListener) {
        this.geneFormListener = listener;
    }
    else if (o instanceof LabFormListener) {
        this.labFormListener = listener;
    }
}

这是从第273行开始的。我的问题是,它运行时已经注释掉了上面的部分,但是现在在未注释的部分中。我需要更改什么才能让setFormListener足够通用来处理这个问题?我可以根据需要提供更多代码或信息。

2 个答案:

答案 0 :(得分:5)

您的变量为o,而不是listener

将您的代码更改为:

public void setFormListener(Object o) {
    if (o instanceof DailyFormListener) {
        this.formDayListener = (DailyFormListener)o;
    }
    else if (o instanceof GeneFormListener) {
        this.geneFormListener = (GeneFormListener)o;
    }
    else if (o instanceof LabFormListener) {
        this.labFormListener = (LabFormListener)o;;
    }
}

答案 1 :(得分:0)

您必须将Object转换为具体的侦听器类型

public void setFormListener(Object o) {
    if (o instanceof DailyFormListener) {
        this.formDayListener = (DailyFormListener)o;
    }
    else if (o instanceof GeneFormListener) {
        this.geneFormListener = (GeneFormListener)o;
    }
    else if (o instanceof LabFormListener) {
        this.labFormListener = (LabFormListener)o;
    }
}