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