Kotlin将String转换为String.Companion

所以我是新来的学习Kotlin,来自C#背景。 我一直在搞类型和其他一些事情。 我试图创建一个“WalMartGreeters”的静态类,可以添加到列表的欢迎,然后调用一个简单的静态函数来显示这些。 我的方法(s)需要一个字符串参数/字符串列表添加到可变的字符串列表,但是当我试图给它添加值。 我得到一个预编译错误,说“预期的String.Companion”“得到字符串”我试图改变它投下的字符串作为String.Companion,然后说,演员是非法的。

我得到的主要错误是:异常在线程“主”java.lang.ClassCastException:java.lang.String不能转换为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 ,则需要将其类型更改为MutableList<String> ,例如:

 var prntList = mutableListOf<String>() 

其次, mutableListOf(String)中的mutableListOf(String)只是一个限定符而不是一个类。 这意味着String将在其范围内引用特定的引用。 在你的情况下, 限定符将引用其伴侣对象 。

伴随对象的成员可以简单地使用类名称作为限定符来调用。

例如:

 // 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)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)