3

我有以下返回 void 的方法,我需要在另一个也返回 void 的方法中使用它。我可以执行以下操作吗?

public void doSomething(){}

public void myMethod()
{
    return doSomething();
}

感谢您的所有评论,但让我更具体

我只doSomething在有事情发生时,否则我做其他事情

public void doSomething(){}

public void myMethod()
{
    for(...)
        if(somethingHappens)
        {
            doSomething();
            return;
        }

    doOtherStuff();
}

除了上面的代码,我可以只写return doSomething();在 if 语句中吗?

4

5 回答 5

14

不,只需这样做:

public void doSomething() { }

public void myMethod()
{
    doSomething();
}

或者在第二种情况下:

public void doSomething() { }

public void myMethod()
{
    // ...
    if (somethingHappens)
    {
        doSomething();
        return;
    }
    // ...
}

“归虚”的意思是什么也不归。如果您想“跳出”myMethod的主体,请使用return;编译器不允许写入return void;(“表达式的非法开始”)或return doSomething();(“无法从结果类型为 void 的方法返回值”)。我理解返回“void”或方法调用的“void result”似乎是合乎逻辑的,但这样的代码会产生误导。我的意思是大多数阅读类似内容的程序员return doSomething();都会认为有一些东西可以返回。

于 2012-06-11T23:46:36.837 回答
5

void 函数不会/不能返回任何东西。只需调用该函数。

于 2012-06-11T23:47:35.580 回答
2

不,Java void 函数中不需要返回。相反,请执行以下操作:

public void myMethod(){
    doSomething();
}

如果你愿意,你可以在 doSomething() 之后添加一个 return,但正如我所说的那样,这是不必要的。

于 2012-06-11T23:48:02.750 回答
0

您要么必须像其他人指出的那样使用 doSoemthing 要么

public (insert data type like int, double, string, etc) myMethod()
{
     return doSomething();
}

如果做某事返回一个 int

// if you wanted to take 2 numbers and add them

public void myMethod()
{
    valueOfX+Y = doSomething();
}

public int doSomething()
{
    x = 2;
    y = 2;
    return X+Y;
}

希望清除它

于 2012-06-12T00:15:59.710 回答
0

如果

  • 条件(somethingHappens)实际上取决于做了doSomething()什么
  • 并且doSomething()是一种您可以修改的方法

那么您应该考虑使其返回boolean(或任何合适的类型)值,该值告诉被调用方方法是否发生。

代码看起来有点像这样:

public boolean doSomething() {
    // internal working
    if (internalCondition) {
         // something done here
         return true;
    }
    // not done ;
    return false;
}

public void myMethod()
{
    for(...)
        if (doSomething())
        {
            return;
        }
    // didn't hit 'doSomething() == true'
    doOtherStuff();
}
于 2015-07-18T07:54:43.780 回答