我目前正在学习Kotlin,我正在做的一种方法是自动将Java代码转换为Kotlin并研究结果。我尝试转换的一段Java代码是类中的以下静态块,它试图确保启用断言:
static {
boolean assertsEnabled = false;
assert assertsEnabled = true;
if (!assertsEnabled)
throw new AssertionError("Please enable assertions!");
}
这依赖于assertsEnabled = true
表达式作为assert
的参数。在Java中,赋值是表达式。在Kotlin,他们不是,因此无法转换。还有其他办法吗?
答案 0 :(得分:1)
不幸的是,Kotlin没有assert
关键字及其特殊语义。相反它有这个功能:
inline fun assert(value: Boolean, lazyMessage: () -> Any)
您可以看到作为第一个参数传递的表达式是无条件计算的。这意味着您无法实现与Java相同的轻量级检查;你必须触发一个实际的断言失败才能确定。
因此,您需要按@Zoe
:
try {
assert(false)
throw IllegalStateException("Please enable assertions!")
} catch (e: AssertionError) {
// Things are looking good; carry on
}
如果您坚持抛出AssertionError
而不是IllegalStateException
,则可以使用布尔变量。
var assertionsAreDisabled = false
try {
assert(false)
assertionsAreDisabled = true
} catch (e: AssertionError) {
// Things are looking good; carry on
}
if (assertionsAreDisabled) {
throw AssertionError("Please enable assertions!")
}