Java 方法能否返回多个类型

Java 方法能否返回多个类型,java,Java,我是Java新手,正在尝试理解以下代码: int someMethod() { return (true ? null : 0); } 该方法的返回类型是int,但它可以同时返回null和int,这在Java中正确吗?Java方法可以返回多个类型吗?对于有经验的人来说,这听起来可能很傻,但我刚刚在Java中迈出了第一步。这是一个条件三元表达式,这意味着该方法返回?后面的两个值中的一个,这取决于对他在之前出现的条件的评估。(在您的情况下,它总是返回true) 表达式(true?null:

我是Java新手,正在尝试理解以下代码:

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

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

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

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

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

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


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

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

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

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


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

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

代码

return (true ? null : 0);
是一个缩写if-else语句或条件三元表达式,可以重写为:

if (true) {
    return null;
}
else {
    return 0;
}
但是,上面的代码不会编译,因为如果返回类型是
int
,则不能返回
null
。上面的代码会编译,因为JVM会尝试将null转换为
int
,这是由于自动取消装箱。在运行时,它会抛出
NullPointerException
,如下所示

为了“返回多个类型”,您可以执行以下操作:

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);
    }
}

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

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

代码

return (true ? null : 0);
是一个缩写if-else语句或条件三元表达式,可以重写为:

if (true) {
    return null;
}
else {
    return 0;
}
但是,上面的代码不会编译,因为如果返回类型是
int
,则不能返回
null
。上面的代码会编译,因为JVM会尝试将null转换为
int
,这是由于自动取消装箱。在运行时,它会抛出
NullPointerException
,如下所示

为了“返回多个类型”,您可以执行以下操作:

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);
    }
}


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

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

是的,它编译时没有错误是的,它编译时没有错误它不会给我编译错误,即使我将int作为返回type@AyushiShah是的,我刚刚修正了答案。@AyushiShah它们不是。
Integer
是一个包含
int
值的类,但会导致运行时错误。@Siguza是的,我还认为它应该是一个compiler错误,但不是。如果我们使用if-else而不是三元,那么这是一个编译错误。这是一个好问题,它不会给我编译错误,即使我保留int作为返回type@AyushiShah是的,我刚刚修正了答案。@AyushiShah它们不是。
Integer
是一个包含
int
值的类,但会导致运行时错误。@Siguza是的,我也认为这应该是一个编译器错误,但不是。如果我们使用if-else而不是三元,那么这是一个编译错误。这是一个好问题。如果我想从同一个方法返回boolean和int呢?@AyushiShah-如果是这样,那么你应该将它们包装在一个类中,并从该方法返回该类的对象!你的方法返回类型将是在这种情况下,请更改为类类型。@AyushiShah您不能。谢谢您的帮助answer@AyushiShah但是,我编辑了对你问题的回答,指出了一个解决方法。如果我想从同一个方法返回boolean和int怎么办?@AyushiShah-如果是这样,那么你应该将它们包装在一个类中,并从该方法返回该类的对象!哟然后,ur方法返回类型将更改为Clas