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)
}
当遇到前面提到的代码时,我会感到困惑。如果代码来自Kafkalogsegment。我想知道为什么我们需要一个可选的在这里,而不是简单地返回一个布尔值 canAppendOffset()
. 对于我来说,为什么我们需要创建一个可选的并访问一个记录我需要的布尔值的字段似乎没有必要。我认为在软件设计方面一定有一些逻辑。有没有人能就在scala中使用optional的位置和原因给出一些建议?
2条答案
按热度按时间bxpogfeg1#
对于我来说,为什么我们需要创建一个可选的并访问一个记录我需要的布尔值的字段似乎没有必要。
我同意。创建一个
toRelative
方法返回Option[Int]
如果在实际使用计算偏移量的其他地方使用。很可能这个方法以前被用于其他用例,并且理解了实际使用的相对偏移量。如果只想知道是否可以追加偏移量,可以简化:
k3bvogb12#
这里似乎有一些误解。
…创建一个可选字段并访问一个记录布尔值的字段。。。
这里没有田地。
isDefined
是中的一种方法Option
类,该类测试此示例是否Some()
或者None
.…为什么我们需要一个可选的在这里,而不是简单地返回一个布尔值
canAppendOffset()
.但是
canAppendOffset()
“只是返回一个Boolean
". 是的toRelative()
“创造”了Option
它这样做是因为,虽然它应该从给定的偏移量返回一个“相对值”,但如果不可能得到一个有效的结果,它实际上可能会失败。所以它返回一个
Option[Int]
,从而告诉来电者,“这是Some(relative)
如果它可以从给定的偏移量计算出来,但是None
如果我不能给你算出一个好结果。”