Kotlin可检查异常的替代方案

17

既然 Kotlin 不支持“受检异常”,那么如何让程序员知道一个方法可能会抛出异常呢?

这里有一个简单的例子:

class Calculator (value: Int = 0) {

    fun divide (dividend: BigDecimal, divider: BigDecimal) : BigDecimal {
        return dividend / divider
    }
}

显然,除法运算可能会抛出 java.lang.ArithmeticException: Division by zero 异常,库的创建者需要警告类的用户将调用放在 try-catch 语句块中。

Kotlin 中有哪些机制可以实现这种警告?


ArithmeticException不是“已检查异常”,因此即使在JAVA中,程序员也不会收到警告。您必须使用例如IOException。 - PrzemekTom
@Przemo 真的吗?谢谢你提供这个信息。 - Jocky Doe
3个回答

9
鉴于该语言没有构造来明确表示这一点,唯一剩下的就是:隐含的。
例如通过放置清晰地告诉方法用户有哪些异常可能会被抛出的javadoc。或者您可以使用@Throws注释。
也许,kotlin团队最终会添加编译器警告来弥补这一点(请参见此处)。

隐式错误处理。- Kotlin,2016 - Jeffrey Blattman

3

2
您可以使用 kotlin.Result,详情请参见https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-result/
import java.math.BigDecimal

class Calculator() {

    private companion object {
        val ZERO: BigDecimal = BigDecimal(0)
    }

    fun divide(dividend: BigDecimal, divider: BigDecimal): Result<BigDecimal> =
        if (divider != ZERO) {
            val ans = dividend.divide(divider)
            Result.success(ans)
        } else {
            val throwable = ArithmeticException("Division by zero")
            Result.failure(throwable)
        }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接