Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我需要帮助才能回来_Java_Return_Return Value - Fatal编程技术网

Java 我需要帮助才能回来

Java 我需要帮助才能回来,java,return,return-value,Java,Return,Return Value,我正在制作我的第一个GUI程序,遇到了一个小问题。我需要返回字符串值,以便在方法“saying”中使用它。这部分是一个子类-在另一个类中构建的类。。 错误返回值;获取的是:void方法不能返回值。我知道我必须用什么来取代空虚??问候奥利弗 private class Eventhandler implements ActionListener{ double amount; public void actionPerformed(ActionEvent event){

我正在制作我的第一个GUI程序,遇到了一个小问题。我需要返回字符串值,以便在方法“saying”中使用它。这部分是一个子类-在另一个类中构建的类。。 错误返回值;获取的是: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
返回任何内容,因为这是在
ActionListener
界面中指定的。即使可以,它也不会对您有任何好处,因为您不是调用
actionPerformed
函数的人

您要做的是以某种方式给父类
。一种方法是将
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
实例。您必须使用父类的
this
语法来获取父类的
this
。用父类的实际名称替换父类


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

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

您要做的是以某种方式给父类
。一种方法是将
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
实例。您必须使用父类的
this
语法来获取父类的
this
。用父类的实际名称替换父类


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

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

private class Eventhandler implements ActionListener{
String value=''


   public void actionPerformed(ActionEvent event){
      value="newvalue";
      // rest code goes here
   }
}

您不能更改api定义方法的返回类型

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

private class Eventhandler implements ActionListener{
String value=''


   public void actionPerformed(ActionEvent event){
      value="newvalue";
      // rest code goes here
   }
}

除非在程序的其他地方需要字符串值,否则无法更改api定义方法的返回类型:

替换

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

然后改变

return value;


除非您需要程序中其他地方的字符串值:

替换

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

然后改变

return value;


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