[英]Can method return more than one type
我是 Java 新手并试图理解以下代码:
int someMethod() {
return (true ? null : 0);
}
该方法的返回类型是int
,但它可以返回null
和int
,这是 Java 中的正确行为吗? Java 方法可以返回多个类型吗? 对于有经验的人来说,这可能听起来很愚蠢,但我刚刚在 Java 中迈出了第一步。
一个方法不能返回多个类型。
如果方法不返回任何内容,则方法的签名包含返回类型或void
。 由于它必须在方法签名中定义,因此您必须返回该类型的内容。
编码
return (true ? null : 0);
是 if-else 语句或条件三元表达式的速记,可以改写为:
if (true) {
return null;
}
else {
return 0;
}
但是,上面的代码将无法编译,因为如果返回类型是
原始类型
。 上面的代码会编译,因为 JVM 会尝试将 null 转换为int
则无法返回
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
,因为这是null
和0
的常见类型。
您的代码将抛出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.