无法在方法java中返回值

时间:2013-03-23 20:09:33

标签: java

也许我的问题很愚蠢,但我无法解决。

这是我的代码:

public Velocity add(final Velocity velocity)
{
    Velocity vel;
    if(velocity.getClass().equals(CartesianCoordinate(x, y)))
    {
        double sumX = x + velocity.x;
        double sumY = y + velocity.y;
        Velocity v = new Velocity(CartesianCoordinate(x,y));
        v.x = sumX;
        v.y = sumY;
        vel = v;
    }

    if(velocity.getClass().equals(p))
    {
        do something...
    }
    return vel;
}

任何人都可以告诉我为什么我不能返回“vel”,我不想创建一个类变量......

3 个答案:

答案 0 :(得分:2)

  

任何人都可以告诉我为什么我不能返回“vel”

当然 - 如果你的条件都没有,你还没有给它一个值。变量不是明确分配,因此您无法读取其值以返回它。在这种情况下,你想要返回什么?它甚至有效吗?也许你应该在这种情况下抛出异常。

我个人实际上会从每个if块返回 - 我认为局部变量不会增加任何好处。那时,更明显的是错误:

public Velocity add(final Velocity velocity) {
    if (...) {
        ...
        return ...;
    }
    if (...) {
        ...
        return ...;
    }
    // What should we do if we get here?
}

既然的两个条件确定了返回值只是立即返回它,那么更明显(IMO)如果你到达底部,那是因为这两个条件都没有被评估为true ...所以要么返回一些“空”值,要么返回空引用,或者抛出异常。

当然,假设您不希望第二个条件有效地胜过第一个条件,它现在也是如此 - 如果两个条件都为真,那么第一个区块中设置的值可能是无关紧要的,因为它'将被第二个区块覆盖。

还不清楚CartesianCoordinate做了什么,但奇怪地命名为Java方法 - 如果它返回Class<?>那肯定很奇怪。这里的p是什么?我不知道你的真实代码是否与此有些不同,但即使除了不能编译的原因外,它对我来说也有些腥味。

答案 1 :(得分:1)

局部变量没有默认值,应该初始化。

如果val是实例字段或静态字段并且未初始化,则在访问时它将返回默认值。

答案 2 :(得分:0)

您只能返回带有值的变量。因此,val没有一个可能的情况。

解决此问题的简便方法是直接在声明上初始化val

Velocity vel = null; //or
Velocity vel = new Velocity();

或者您需要在else语句中添加if分支,其中vel也已初始化。

if(velocity.getClass().equals(CartesianCoordinate(x, y)))
{
    double sumX = x + velocity.x;
    double sumY = y + velocity.y;
    Velocity v = new Velocity(CartesianCoordinate(x,y));
    v.x = sumX;
    v.y = sumY;
    vel = v;
}else{
    vel = null;//or
    vel = new Velocity();
}