在Kotlin中,多类型的ArrayList作为函数参数。

我想发送一个包含多种类型的数组列表到一个函数中(我知道这不是一个好的做法,这是故意的)。

我不知道函数的’numbers’参数应该使用什么类型。然后如何对其进行迭代。我试过List,但那需要一个.Net类型的参数。

谢谢,我想发送一个包含数字的数组列表。

fun sum(numbers : ArrayList) : Double
{
    var sum:Double = 0.0

    for(i in 0 until numbers.itemCount)
    {
        var temp:Double = numbers.getItem(i).toDouble()
        sum = sum + temp
    }

    return sum
}

fun main()
{
    var ar = listOf("99", 1, 3.1)

    println(sum(ar))
}

解决方案:

如果不检查特定的类型,你就不能这样做。String.toDouble() 是不一样的函数 Number.toDouble() 即使他们看起来是一样的。你的 ArrayList 类型必须是 Any 要能同时接受 Strings和 Numbers. 然后你必须显式地检查类型。你必须通过抛出异常来处理不是字符串或数字的情况。

你可以把类型定为 List<Any> 而不是 ArrayList<Any> 以避免不必要的投入限制。

fun sum(numbers : List<Any>) : Double
{
    var sum: Double = 0.0

    for(item in numbers) {
        val temp = when (item) {
            is String -> item.toDouble()
            is Number -> item.toDouble()
            else -> error("Unsupported type")
        }
        sum += temp
    }

    return sum
}

目前有一个 sumBy() 函数,所以你可以简化这段代码。

fun sum(numbers : List<Any>) : Double = numbers.sumBy {
    when (it) {
        is String -> it.toDouble()
        is Number -> it.toDouble()
        else -> error("Unsupported type")
    }
}

给TA打赏
共{{data.count}}人
人已打赏
未分类

Debezium cassandra CDC插件安装在cassandra节点上。

2022-9-9 5:08:16

未分类

如何在Flutter项目中运行选定的飞镖文件作为主程序?

2022-9-9 5:08:18

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索