【问题标题】:I need help to return我需要帮助才能返回
【发布时间】:2013-12-24 02:34:41
【问题描述】:

我正在制作我的第一个 GUI 程序,但遇到了一个小问题。我需要返回字符串值,所以我可以在“说”方法中使用它。这部分是一个子类 - 一个内置在另一个类中的类.. 错误返回值;得到的是:void 方法不能返回值。我知道我必须替换 void,但是用什么替换?问候奥利弗

private class Eventhandler implements ActionListener{
    double amount;


    public void actionPerformed(ActionEvent event){

        String string = "";
        String string1 = "";

        if(event.getSource()==item1)
            string=String.format(event.getActionCommand());
        else if(event.getSource()==item2)
        string1=String.format(event.getActionCommand());

        JOptionPane.showMessageDialog(null, string);

        double fn = Double.parseDouble(string);
        double sn = Double.parseDouble(string1);
        double amount = fn + sn;

        String value = Double.toString(amount);

        return value;


    }

}
public void saying(){
    System.out.println(value);
}

}

【问题讨论】:

  • 如果你想覆盖actionPerformed方法,你不能。方法的返回类型必须为void。
  • 公共字符串 actionPerformed(ActionEvent 事件){}
  • @Dimentar 你不能那样做。你读过这里的其他答案吗?
  • 在其他答案之前发布,之后重新加载页面

标签: java return return-value


【解决方案1】:

正如其他人所说,您不能从actionPerformed 返回任何内容,因为这是在ActionListener 接口中指定的。即使可以,它也对您没有任何好处,因为您不是调用actionPerformed 函数的人。

你想要做的是给父类value,不知何故。一种方法是让value 成为父类上的一个字段。然后你可以从actionPerformed函数中设置它:

private class ParentClass {
    private String value;

    //... stuff ...

    private class Eventhandler implements ActionListener{
        double amount;

        public void actionPerformed(ActionEvent event){
            //... stuff ...

            ParentClass.this.value = Double.toString(amount);
        }
    }

    public void saying(){
        System.out.println(value);
    }
}

请注意,您不能在内部类中执行this.value = value,因为该函数中的this 指的是Eventhandler 实例。您必须使用ParentClass.this 语法来获取父类的this。将ParentClass 替换为您的父类的实际名称。

更好的方法可能是在父类上使用setValue() 函数,内部Eventhandler 类调用该函数。这取决于你想做什么。

【讨论】:

    【解决方案2】:

    您可以创建一个实例变量,并可以在actionPerformed 方法中初始化它,如下所示

    private class Eventhandler implements ActionListener{
    String value=''
    
    
       public void actionPerformed(ActionEvent event){
          value="newvalue";
          // rest code goes here
       }
    }
    

    你不能改变api定义方法的返回类型

    【讨论】:

      【解决方案3】:

      除非您在程序的其他地方需要 String 值:

      替换

      public void saying(){
         System.out.println(value);
      }
      

      public void saying(String value){
          System.out.println(value);
      }
      

      然后改变

      return value;
      

      saying(value);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-18
        • 2020-08-03
        • 1970-01-01
        • 2015-03-24
        • 2023-04-08
        • 1970-01-01
        相关资源
        最近更新 更多