【发布时间】:2020-04-28 07:09:56
【问题描述】:
def canAppendOffset(offset: Long): Boolean = {
toRelative(offset).isDefined
}
private def toRelative(offset: Long): Option[Int] = {
val relativeOffset = offset - baseOffset
if (relativeOffset < 0 || relativeOffset > Int.MaxValue) None
else Some(relativeOffset.toInt)
}
遇到上述代码时,我感到很困惑。来自 Kafka LogSegment 的代码。我想知道为什么我们在这里需要一个 Optional 而不是简单地在 canAppendOffset() 中返回一个布尔值。对我来说,为什么我们需要创建一个 Optional 并访问一个记录我需要的布尔值的字段似乎没有必要。
我认为在软件设计方面一定有一些逻辑。任何人都可以就在哪里以及为什么在 Scala 中使用 Optional 提供任何建议吗?
【问题讨论】:
-
请注意,Option 不仅仅用于处理
null。 Option 表示缺失值或无法返回值的计算的效果。大多数语言使用null处理这个问题;例如爪哇。这就是为什么 Option 的构造函数会捕获null。但是,(并鼓励)即使在没有 null 的情况下也可以返回可选值,这只是为了表明,这里的这个值可能存在也可能不存在。
标签: scala apache-kafka syntax utility