[英]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.