【发布时间】:2020-12-18 21:43:51
【问题描述】:
使用字符串时,您可以检查字符串是否属于这样的字符串集:
if (a in listOf("ab", "abab")) {
// do something
}
或者:
when (a) {
in listOf("akshd", "sd") -> {
// do something
}
}
现在,假设您有一个密封类:
sealed class SealedClass {
class Subclass1 : SealedClass()
class Subclass2 : SealedClass()
class Subclass3 : SealedClass()
}
有一个很好的方法可以检查某个对象 b 是否在这些类型的子集中。如果你使用when 表达式,你可以这样写:
when (b) {
is SealedClass.Subclass1, is SealedClass.Subclass2 -> {
// do something
}
}
如果你想使用if 表达式,事情就会变得复杂。你可以这样写:
if (b is SealedClass.Subclass1 || b is SealedClass.Subclass2) {
// do something
}
或者这个:
if (
b::class in listOf(
SealedClass.Subclass1::class,
SealedClass.Subclass2::class
)
) {
// do something
}
上述两种解决方案都相当笨拙。
使用if 语句时,有没有更优雅的方式来表达这种检查?
【问题讨论】:
标签: kotlin