【问题标题】:Why is it not possible to use the constructor parameter (not property) directly as variables for a member function?为什么不能直接使用构造函数参数(不是属性)作为成员函数的变量?
【发布时间】:2020-02-02 00:22:45
【问题描述】:

下面的例子最能描述我的误解:

class myExampleClass (
    myString: String,
    val myInt: Int,
) {

    fun memberFunction() {
        val memberFunctionValA = myString // does not work
        val memberFunctionValB = myInt // does work
    }
}

有什么具体原因吗?我们是否总是必须将参数声明为属性才能在类中使用它们?

【问题讨论】:

    标签: kotlin parameters properties member-functions


    【解决方案1】:

    对于从主构造函数声明属性和初始化它们,Kotlin 有一个简洁的语法:

    class Person(val firstName: String, val lastName: String, var age: Int) { /*...*/ }
    

    我在https://kotlinlang.org/docs/reference/classes.html 上找到了这个 据我了解,您在第一个参数中错过了 val 关键字。

    class myExampleClass (
        val myString: String,        // this might work
        val myInt: Int,
    ) {
    
        fun memberFunction() {
            val memberFunctionValA = myString // does not work
            val memberFunctionValB = myInt // does work
        }
    }
    

    【讨论】:

    • 是的,我想知道是否有特定原因必须将其声明为属性(使用 val 关键字)。还是只是“就是这样”?
    • 就是这样。开发人员想要区分构造函数中的可初始化变量和非变量。我没有经常使用 kotlin,但出于某种目的,这种方式可能很有效。
    • 啊,好的,请在你的答案中包含这个,我可以检查一下
    • "为了声明属性并从主构造函数初始化它们,Kotlin 有一个简洁的语法:"它已经存在了。我在 kotlin 文档中找到了它。你还有别的意思吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    相关资源
    最近更新 更多