在Java中检查null作为函数返回的正确方法是什么

时间:2017-10-23 20:10:47

标签: java null

我正在学习Java,下面是一个简单的函数,需要两个数字和一个char来做一些基本的加,减,乘和除运算。完成后,它将返回结果。

请参阅以下代码中的注释1,2 -

我想发送null但由于int返回类型,编译器发出错误。这个案例是如何在Java中处理的。我来自一个快速的背景,其中一个函数可以有一个可选的返回类型,可以在使用Guard调用函数时解包。我很想知道用Java处理这种情况的正确方法。

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':

            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**

        }
}

3 个答案:

答案 0 :(得分:1)

原始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;
    }
}

答案 1 :(得分:0)

处理此问题的正确方法是在操作无效时抛出IllegalArgumentException,在尝试除以零时抛出ArithmeticException

答案 2 :(得分:0)

通常你会抛出异常。 例如

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'");
    }
}