【发布时间】:2017-08-06 01:33:32
【问题描述】:
所以我是学习 Kotlin 的新手,来自 C# 背景。我一直在搞乱类型和其他一些事情。我正在尝试创建一个静态类“WalMartGreeters”,它可以将欢迎者添加到列表中,然后调用一个简单的静态函数来显示它们。我的方法需要一个字符串参数/字符串列表来添加到可变字符串列表中,但是当我尝试向它添加值时。我收到一个预编译错误,说“预期的 String.Companion”“得到了 String”我尝试将其更改为将 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");
}
}
}
}
【问题讨论】:
-
:),将
prntList = mutableListOf(String)替换为prntList = mutableListOf<String>(),将prntList初始化为MutableList<StringCompanionObject>而不是MutableList<String>。 -
做到了,但为什么呢?为什么我能够将它初始化为 mutableListOf(String) 而没有语法错误?为什么默认情况下会将 MutableList(String) 转换为... String.Companion?那是因为它在一个伴随对象中吗?
-
否,
prntList.add(strNameToAdd)报编译错误。你用的是什么编辑器? -
没错,但那是因为它无法将 Java.String 转换为 Kotlin.String.Companion 或 w/e,为什么它默认显示为 String.Companion?我在 Ubuntu 上使用 IntelliJ。另外,我可以输入更正,但宁愿把它给你
-
就像,为什么 :: var prntList = mutableListOf(String) :: 不起作用。在 intelliJ IDE 中,它会在伴随函数中给出错误,指出给出了 String 但需要 String.Companion 项。为什么 mutableListOf
() 有效但 mutableListOf(String) 无效?