簡體   English   中英

方法可以返回不止一種類型

[英]Can method return more than one type

我是 Java 新手並試圖理解以下代碼:

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

該方法的返回類型是int ,但它可以返回nullint ,這是 Java 中的正確行為嗎? Java 方法可以返回多個類型嗎? 對於有經驗的人來說,這可能聽起來很愚蠢,但我剛剛在 Java 中邁出了第一步。

一個方法不能返回多個類型。

如果方法不返回任何內容,則方法的簽名包含返回類型或void 由於它必須在方法簽名中定義,因此您必須返回該類型的內容。

編碼

return (true ? null : 0);

是 if-else 語句或條件三元表達式的速記,可以改寫為:

if (true) {
    return null;
}
else {
    return 0;
}

但是,上面的代碼將無法編譯,因為如果返回類型是 原始類型 int則無法返回 null 上面的代碼會編譯,因為 JVM 會嘗試將 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 ,因為這是null0的常見類型。

您的代碼將拋出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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM