所以我是新来的学习Kotlin,来自C#背景 . 我一直在搞乱类型和其他一些东西 . 我正在尝试创建一个静态类“WalMartGreeters”,可以将列表添加到列表中,然后调用一个简单的静态函数来显示它们 . 我的方法采用字符串参数/字符串列表添加到可变字符串列表但是当我尝试向其添加值时 . 我得到一个预编译错误,说“期望String.Companion”“得到字符串”我试图改变它以将String转换为String.Companion,然后它说演员表是非法的 .
我得到的主要错误是:线程“main”中的异常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");
}
}
}
}
1 回答
首先,您的问题中的上述代码无法编译,因为
prntList
是MutableList<String.Companion>
而不是MutableList<String>
. 如果您希望prntList
添加String
,则需要将其类型更改为MutableList<String>
,例如:其次,
mutableListOf(String)
中的String
只是一个 qualifier 而不是一个类 . 这意味着String
将引用其范围内的特定参考 . 在您的情况下,限定符将引用其companion object .例如:
另一方面,您还可以将限定符引用到顶级变量,例如:
mutableListOf<String>()
和mutableListOf(String)
之间的差异如下: