Kotlin 构造函数属性 val 不能在类中使用

des*_*ori 5 android constructor kotlin

以下作品

class PagerAdapter(var tabCount: Int, fm: FragmentManager?) : FragmentStatePagerAdapter(fm) {
    override fun getItem(p0: Int): Fragment { 
        return when (p0) {
            0 -> TabFragment1()
            1 -> TabFragment2()
            2 -> TabFragment3()
            else -> throw IllegalArgumentException("Invalid color param value")
        }
    }
    override fun getCount() = tabCount
}  
Run Code Online (Sandbox Code Playgroud)

这不是(未解析的参考:tabCount)

class PagerAdapter(tabCount: Int, fm: FragmentManager?) : FragmentStatePagerAdapter(fm) {
    override fun getItem(p0: Int): Fragment { 
        return when (p0) {
            0 -> TabFragment1()
            1 -> TabFragment2()
            2 -> TabFragment3()
            else -> throw IllegalArgumentException("Invalid color param value")
        }
    }
    override fun getCount() = tabCount
}  
Run Code Online (Sandbox Code Playgroud)

我是 Kotlin 的新手,只是很困惑为什么不能在类本身中使用 val 属性。有人可以解释一下吗?谢谢

Rol*_*and 7

第二个不起作用,因为您没有声明该类的任何属性。仅在括号中提及它们并不会使它们成为属性,而是可以像它们只是构造函数的参数一样进行比较。

您要么想使用,var要么……如果您愿意,val您可以制作它们。private

另请检查Kotlins 关于类和继承的参考,更具体地说是构造函数章节

事实上,对于声明属性并从主构造函数初始化它们,Kotlin 具有简洁的语法:

class Person(val firstName: String, val lastName: String, var age: Int) { ... }
Run Code Online (Sandbox Code Playgroud)

与常规属性非常相似,在主构造函数中声明的属性可以是可变的var或只读的val