【问题标题】:How to initialize a variable in Kotlin with an Interfaced type?如何使用接口类型在 Kotlin 中初始化变量?
【发布时间】:2019-02-26 18:29:57
【问题描述】:

我是 Kotlin 的新手。我想尝试 create-react-kotlin-app,因为我目前是一名 React 开发人员,我想探索 Kotlin。

我很难实例化我的变量。我正在尝试这样做:

fun main(args: Array<String>) {
    val rootDiv = document.getElementById("root")
    val gm : GameUiProps
    gm.numPlayers = 2
    gm.cardArray = arrayOf("Card to be dealt", "Cards to be Dealt")
    gm.playerArray = arrayOf("Player 1", "Player 2")

    RBuilder.render(rootDiv) {
        GameUi(gm)
    }
}

我的gm 变量没有被初始化,我不知道该怎么做。

我需要用道具初始化我的 GameUi 组件,但我不知道该怎么做。

所以 GameUiProps 来自我的组件

interface GameUiProps : RProps {
    var numPlayers: Int
    var playerArray: Array<String>
    var cardArray: Array<String>
}

class GameUi(props: GameUiProps) : RComponent<GameUiProps, RState>(props) {

    private fun RBuilder.createHands() {
        var numPlayers = props.numPlayers
        val handArray: ArrayList<Unit> = ArrayList()
        while (numPlayers > 0) {
            handArray.add(
                    handUi(
                            props.playerArray[numPlayers],
                            props.cardArray[numPlayers]
                    )
            )
            numPlayers--
        }
    }

    override fun RBuilder.render() {
        div {
            h1("sweet") {
                +"RKT"
            }
            div {
                createHands()
            }
        }
    }
}

【问题讨论】:

    标签: kotlin create-react-kotlin-app


    【解决方案1】:

    你的GameUiProps只是一个接口,不能直接实例化。

    您所拥有的 (val gm: GameUiProps) 只是字段声明,没有为其分配任何内容。您显然无法访问或写入任何属性。

    您需要使用构造函数创建一个简单的实现,或者创建一个匿名对象。

    在构造函数中声明所有接口字段的类:

    class GameUiPropsImpl(
        override var numPlayers: Int, 
        override var playerArray: Array<String>, 
        override var cardArray: Array<String>) : GameUiProps
    

    然后在你的fun main:

    val gm = GameUiPropsImpl(2, arrayOf("Player 1", "Player 2"), arrayOf("Card to be dealt", "Cards to be Dealt"))
    

    或者使用实现接口的匿名类:

    val gm = object: GameUiProps{
        override var numPlayers = 2
        override var playerArray = arrayOf("Player 1", "Player 2")
        override var cardArray = arrayOf("Card to be dealt", "Cards to be Dealt")
    }
    

    【讨论】:

      猜你喜欢
      • 2020-04-26
      • 1970-01-01
      • 2021-07-08
      • 2019-08-21
      • 1970-01-01
      • 2021-12-28
      • 2018-11-19
      • 2018-12-15
      • 1970-01-01
      相关资源
      最近更新 更多