繁体   English   中英

方法可以返回不止一种类型

[英]Can method return more than one type

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

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

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

一个方法不能返回多个类型。

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

编码

return (true ? null : 0);

是 if-else 语句或条件三元表达式的速记,可以改写为:

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

但是,上面的代码将无法编译,因为如果返回类型是 原始类型 int则无法返回 null 上面的代码会编译,因为 JVM 会尝试将 null 转换为int ,这是由于自动拆箱。 在运行时,它会抛出NullPointerException ,正如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 (someCondition) {
        return new BooleanOrInt(theBooleanYouWant);
    }
    else {
        return new BooleanOrInt(theIntegerYouWant);
    }
}

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM