string - Kotlin 将字符串转换为 String.Companion

标签 string casting kotlin

所以我是学习 Kotlin 的新手,来自 C# 背景。我一直在处理类型和其他一些事情。我正在尝试创建一个静态类“WalMartGreeters”,它可以将欢迎词添加到列表中,然后调用一个简单的静态函数来显示它们。我的方法需要一个字符串参数/字符串列表来添加到可变字符串列表中,但是当我尝试向它添加值时。我收到一个预编译错误,说“预期的 String.Companion”“得到了字符串”我尝试将其更改为将 String 转换为 String.Companion,然后它说转换是非法的。

我得到的主要错误是:线程“main”中的异常 java.lang.ClassCastException: java.lang.String cannot be cast to kotlin.jvm.internal.StringCompanionObject

fun main(args:Array<String>) {
    walMartGreeter.addTo("Jean")
    walMartGreeter.addTo("Dale")
    walMartGreeter.addTo("Phil")
    walMartGreeter.addTo("Chris")
    walMartGreeter.listTheWholeFam()
}

class walMartGreeter(val strName:String) {
    companion object classList {
        var prntList = mutableListOf(String)

        fun addTo(strNameToAdd:String) {
            prntList.add(strNameToAdd)
        }

        fun addTo(listOfNames:List<String>) {
            for (item in listOfNames) {
                prntList.add(item)
            }
        }

        fun listTheWholeFam() {
            //println("All I do is $strName")
            for(item in prntList) {
                println("Hello, $item!")
            }
            //println("type of mutList: ${mutList.ToString()}")
            if(prntList is MutableList) {
                println("Yeah, it's a mutableList");
            }
        }
    }
}

最佳答案

首先,由于 prntList 无法编译您问题中的上述代码是 MutableList<String.Companion>而不是 MutableList<String> .如果您想要 prntList添加 String s,您需要将其类型更改为 MutableList<String> , 例如:

var prntList = mutableListOf<String>()

其次,StringmutableListOf(String)只是一个 预选赛而不是一个类(class)。这意味着 String将引用其范围内的特定引用。在您的情况下,限定符将引用其 companion object .

Members of the companion object can be called by using simply the class name as the qualifier.



例如:
//                         v--- reference to its companion object
val it:String.Companion = String

另一方面,您还可以将限定符引用到顶级变量,例如:
 val String = ""
 //                            v--- reference to the top-level variable
 var prntList = mutableListOf(String)
 //  ^---is a `MutableList<String>` rather than `MutableList<String.Companion>` now
mutableListOf<String>()之间的区别和 mutableListOf(String)如下:
//             v--- it is a type argument of the `String` class
mutableListOf<String>()

//             v--- it is a qualifier that reference to `String.Companion`
mutableListOf(String)

关于string - Kotlin 将字符串转换为 String.Companion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45527832/

相关文章:

java - Golang 中的拆分器

c# - 如何在 C# 中将元组转换为数组?

swift - 使函数能够处理不同的类作为参数

kotlin - Kotlin-when和let从列表中删除元素

Android Kotlin Kotlinx 模块级别 View 绑定(bind)

C#比较字符串中的字符

php - 搜索字符串形成数据库表中的多列

selenium - 如何添加Gradle Kotlin依赖编译组: 'org.seleniumhq.selenium' ?

.net - .Net 中的 struct String 会有好处吗?

c# - 将对象转换为 List<T> 以便能够使用扩展方法