簡體   English   中英

在Java中檢查null作為函數返回的正確方法是什么

[英]What is the correct way to check for null as a function return in Java

請參考下面代碼中的注釋1、2-

在 swift 中,函數可以有一個可選的返回類型,可以在使用 Guard 調用函數時解包。 我很想知道在 Java 中處理此類情況下返回 optional 的正確方法。

static Integer doCalc(Integer num1, Integer num2, char operation) {

        switch(operation) {

        case 'a':
            return num1 + num2;

        case 's':
            return num1 - num2;

        case 'm':
            return num1 * num2; 
        case 'd':

            return num2 != 0 ? num1 / num2 : -1; // **COMMENT 1**

        default: 
            System.out.println("not a valid operation. use 'a' 's' 'm' 'd'");
            return -1; // **COMMENT 2**

        }
}

原始int (或任何其他原始類型,就此而言)不能為null 您可以使用包裝類(在本例中為java.lang.Integer ),並為錯誤輸入返回null並在有效輸入上返回自動裝箱值:

static Integer doCalc(int num1, int num2, char operation) {
    switch(operation) {
        case 'a':
            return num1 + num2;
        case 's':
            return num1 - num2;
        case 'm':
            return num1 * num2; 
        case 'd':
            return num2 != 0 ? num1 / num2 : null;
        default: 
            System.out.println("not a valid operation. use 'a' 's' 'm' 'd'");
            return null;
    }
}

處理此問題的正確方法是在操作無效時拋出IllegalArgumentException並在嘗試除以零時拋出ArithmeticException

通常你會拋出一個異常。 例如。

static int doCalc(int num1, int num2, char operation) {

    switch(operation) {

    case 'a':
        return num1 + num2;

    case 's':
        return num1 - num2;

    case 'm':
        return num1 * num2; 
    case 'd':
        if (num2 == 0) {
             throw new IllegalArgumentException("cannot divide by zero");
        }
        return num1 / num2;

    default: 
        throw new IllegalArgumentException("not a valid operation. use 'a' 's' 'm' 'd'");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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