如何在Kotlin中创建一个泛型函数,其参数只允许String和Number

x6yk4ghg  于 7个月前  发布在  Kotlin
关注(0)|答案(1)|浏览(63)

我想创建一个通用的总结方法,使用数字,字符和字符串

fun <T> sumAndPrint(vararg elements: T?): T where T : Char?, T : String?, T : Number? {
        when (elements[0]) {
            is String, is Char -> {
                var result: String = ""
                elements.forEach { result += it.toString() }
                return result as T
            }

            is Number -> {
                var result: Double = 0.0
                elements.forEach { result += it.toDouble() }
                return when(elements[0]){
                    is Float, is Double -> result as T
                    is Int -> result.toInt() as T
                    is Byte -> result.toInt().toByte() as T
                    else -> result as T
                }
            }

            else -> {
                println("Unsupported type")
                return null
            }
        }
    }

字符串
但是我遇到了几个错误,比如“只有一个上界可以是一个类”。
我试过不同的方法,但我没有找到一个解决办法,我只是想知道这样的事情是否可能

igetnqfo

igetnqfo1#

不,这是不可能的,就像扩展多个类是不可能的一样。
但是,你可以将这个方法设为私有,删除where部分,并创建三个非泛型的公共方法。这些方法应该分别接受StringCharNumber元素。在这些方法的主体中,调用你的私有函数。
例如:

fun sumAndPrint(vararg elements: String): String {
    return sumAndPrint<String>(*elements)
}

字符串

相关问题