gpt4 book ai didi

Kotlin - 创建一个用于比较任何类型数字的函数

转载 作者:行者123 更新时间:2023-12-02 12:42:46 24 4
gpt4 key购买 nike

我有下面的 Kotlin 对象声明,检测到气味(重复代码)

object Random {

internal fun generatePositiveFloat(
leftLimit: Float = Float.MIN_VALUE,
rightLimit: Float = Float.MAX_VALUE
): Float {
if (leftLimit < 0) {
throw InvalidAlgorithmParameterException("
Left limit can't be negative"
)
} else if (rightLimit <= leftLimit) {
throw InvalidAlgorithmParameterException(
"Right limit can't be less or equal than left limit"
)
}
return Random().nextFloat()
}

internal fun generatePositiveShort(
leftLimit: Short = 0,
rightLimit: Short = Short.MAX_VALUE
): Short {
if (leftLimit < 0) {
throw InvalidAlgorithmParameterException(
"Left limit can't be negative"
)
} else if (rightLimit <= leftLimit) {
throw InvalidAlgorithmParameterException(
"Right limit can't be less or equal than left limit"
)
}
return ThreadLocalRandom.current().nextInt(
leftLimit.toInt(),
rightLimit.toInt()
).toShort()
}

将这个重复的代码提取到私有(private)函数中的任何想法?

我的想法是这样的......
private fun validatePositiveLimits(
leftLimit: Number,
rightLimit: Comparable<Number>) {

if (leftLimit as Comparable<Number> < 0) {
throw InvalidAlgorithmParameterException(
"Left limit can't be negative"
)
} else if (rightLimit <= leftLimit) {
throw InvalidAlgorithmParameterException(
"Right limit can't be less or equal than left limit"
)
}
}

...但我无法将 leftLimit 与 0 进行比较(leftLimit as Comparable < 0)。

我得到 ClassCastException 试图将整数转换为短整数并尝试将整数转换为浮点数。

非常感谢。

最佳答案

一些简单的泛型可以在这里提供解决方案:

private fun <T : Comparable<T>> checkConditions(left: T, right: T, leftLowerBound: T) {
if (left < leftLowerBound) {
throw InvalidAlgorithmParameterException(
"Left limit can 't be negative"
)
} else if (right <= left) {
throw InvalidAlgorithmParameterException(
"Right limit can't be less or equal than left limit"
)
}
}

像这样为 Float 调用:
checkConditions(leftLimit, rightLimit, 0F)

就像这样的短:
checkConditions(leftLimit, rightLimit, 0.toShort())

关于Kotlin - 创建一个用于比较任何类型数字的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49710117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com