我是新來的Java,並試圖瞭解下面的代碼:方法可以返回多種類型的
int methodOfA()
{
return (true ? null : 0);
}
方法的返回類型爲int,但它可以返回空值和INT,是Java這種正確的行爲? Java方法可以返回多個類型嗎?對於那些有經驗的人來說,這聽起來很愚蠢,但我剛剛在Java中邁出了第一步。
我是新來的Java,並試圖瞭解下面的代碼:方法可以返回多種類型的
int methodOfA()
{
return (true ? null : 0);
}
方法的返回類型爲int,但它可以返回空值和INT,是Java這種正確的行爲? Java方法可以返回多個類型嗎?對於那些有經驗的人來說,這聽起來很愚蠢,但我剛剛在Java中邁出了第一步。
的方法不能返回多個類型。
如果該方法不返回任何內容,則方法的簽名包含返回類型或void
。由於它必須在方法簽名中定義,所以您必須必須返回該類型的內容。
代碼
return (true ? null : 0);
是一個速記if-else語句,或條件表達式三元,和可以改寫該:
if (true) {
return null;
}
else {
return 0;
}
上面的代碼,但是,不會因爲如果返回類型是
primitive type
,則不能返回int
null
。上面的代碼將被編譯,因爲JVM會嘗試將null轉換爲int
。在運行時,它會拋出一個NullPointerException
,如pointed out by 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 (some_condition) {
return new BooleanOrInt(the_boolean_you_want);
}
else {
return new BooleanOrInt(the_integer_you_want);
}
}
如果我想從同一個方法返回boolean和int,該怎麼辦? –
@AyushiShah - 如果是這樣的話,那麼你應該將它們包裝在一個類中,並從該方法返回該類的對象!在這種情況下,您的方法返回類型將更改爲Class類型。 –
@AyushiShah你不能。 –
這是一個條件表達式三元,這意味着該方法返回下列的?
兩個值中的一個,這取決於條件評估他出現之前?
(在你的情況總是返回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)。
是的,它編譯沒有錯誤 –