方法可以返回多种类型

时间:2015-08-09 10:07:27

标签: java

我是Java的新手并试图理解以下代码:

int someMethod() {
    return (true ? null : 0);
}

方法的返回类型是int,但它可以返回nullint,这是Java中的正确行为吗? Java方法可以返回多种类型吗?对于那些经验丰富的人来说,这可能听起来很愚蠢,但我刚刚迈出了Java的第一步。

3 个答案:

答案 0 :(得分:6)

方法不能返回多种类型。

如果方法没有返回任何内容,方法的签名包含返回类型或void。由于必须在方法签名中定义,因此必须返回该类型的内容。

代码

return (true ? null : 0);

是一个简写的if-else语句或条件三元表达式,可以重写为:

if (true) {
    return null;
}
else {
    return 0;
}

但是,上面的代码不会编译,因为如果返回类型是primitive type null ,则无法返回int。上面的代码将编译,因为JVM将尝试将null转换为int。在运行时,它会抛出NullPointerExceptionpointed out by Eran

要返回多种类型',您可以执行以下操作:

public class BooleanOrInt {

    private boolean isInteger; // Whether value is boolean or int
    private boolean b;
    private int i;

    public BooleanOrInt(boolean b) {
        this.b = b;
        this.isInteger = false;
    }

    public BooleanOrInt(int i) {
        this.i = i;
        this.isInteger = true;
    }

    public boolean isInteger() {
        return this.isInteger;
    }
}

然后您的代码应如下所示:

BooleanOrInt methodOfA() {
    if (some_condition) {
        return new BooleanOrInt(the_boolean_you_want);
    }
    else {
        return new BooleanOrInt(the_integer_you_want);
    }
}

答案 1 :(得分:5)

这是一个条件三元表达式,这意味着该方法返回?之后的两个值中的一个,具体取决于他在?之前出现的条件的评估(在您的情况下总是返回true)。

表达式(true ? null : 0)的类型为Integer,因为这是null0的常见类型。

您的代码将抛出NullPointerException,因为当您在返回类型为null的方法中返回Integer int时,JVM会尝试转换Integer 1}}到int并失败。

为了修复此代码,您必须将返回类型更改为Integer(这是用作int基元类型的包装的引用类型):

Integer methodOfA()
{
    return (true ? null : 0);
}

答案 2 :(得分:0)

Java方法不能以您建议的形式返回多个类型。但是,它可以返回任意数量的子类型。在您的情况下,int是基本类型,它不能有子类型。这里不能返回null,因为null只能由返回类型为对象的方法返回。对于基元,您必须指定一些值(在您的情况下为0)。