Kotlin中Unresolved reference: Coin错误求助——Android新手练手问题
解决「Unresolved reference: Coin」错误的方案
嘿,刚看了你的代码,问题很明确——你把Coin类定义成Dice类的嵌套内部类了,这就导致在main函数里直接调用Coin(2)时,Kotlin找不到这个类,因为它的作用域被限制在Dice类内部啦。
问题根源
你原代码里的Coin类是嵌套在Dice类的大括号里的:
class Dice(val numSides :Int){ fun roll() : Int{ return (1..numSides).random() } // Coin被嵌套在Dice内部,外部无法直接访问 class Coin(val numSides :Int) { fun roll() :Int{ return (1..numSides).random() } } }
修复方案
最合理的做法是把Coin类移到Dice类外面,变成顶层类,这样main函数就能直接访问它了。另外我还帮你整理了代码格式(原代码太紧凑啦,可读性很差),顺便修正了拼写错误(fliped应该是flipped):
fun main() { val myFirstDice = Dice(6) println("Your ${myFirstDice.numSides} sided dice rolled ${myFirstDice.roll()}!") val mySecondDice = Dice(20) println("Your ${mySecondDice.numSides} sided dice rolled ${mySecondDice.roll()}!") val myCoin = Coin(2) println("Your ${myCoin.numSides} coin flipped ${myCoin.flip()}") } class Dice(val numSides: Int) { fun roll(): Int { return (1..numSides).random() } } // 将Coin类移到Dice外部,成为顶层类 class Coin(val numSides: Int) { // 这里把方法名改成flip更贴合硬币的场景,当然继续用roll也没问题 fun flip(): Int { return (1..numSides).random() } }
额外优化建议
如果想让代码更优雅,其实可以考虑用接口来统一Dice和Coin的行为,比如定义一个Rollable接口,让两者都实现它:
interface Rollable { fun roll(): Int } class Dice(val numSides: Int) : Rollable { override fun roll(): Int { return (1..numSides).random() } } class Coin : Rollable { // 硬币只有正反两面,不需要传入numSides,直接固定为2 override fun roll(): Int { return (1..2).random() } }
这样代码的扩展性更好,后续如果要加其他可投掷的物品(比如骰子、卡牌),都可以实现这个接口~
内容的提问来源于stack exchange,提问作者Artin Nemati
相关产品推荐
相关产品推荐

