无法访问kotlin多平台中的预期类构造函数参数
我目前正在使用kotlin开发一个多平台模块。要做到这一点,我依赖于 我在无法访问kotlin多平台中的预期类构造函数参数,kotlin,kotlin-multiplatform,kmm,Kotlin,Kotlin Multiplatform,Kmm,我目前正在使用kotlin开发一个多平台模块。要做到这一点,我依赖于 我在Common.kt中声明了一个简单的类: expect class Bar constructor( name: String ) fun hello(bar: Bar) { print("Hello, my name is ${bar.name}") } actual data class Bar actual constructor( val name: String ) 我想在公
Common.kt
中声明了一个简单的类:
expect class Bar constructor(
name: String
)
fun hello(bar: Bar) {
print("Hello, my name is ${bar.name}")
}
actual data class Bar actual constructor(
val name: String
)
我想在公共方法中使用定义的类(也出现在common.kt
中):
实际实现在Jvm.kt
中定义:
expect class Bar constructor(
name: String
)
fun hello(bar: Bar) {
print("Hello, my name is ${bar.name}")
}
actual data class Bar actual constructor(
val name: String
)
问题是我的hello
函数中出现以下错误
未解析的引用:名称
我做错了什么?它也应该是
expect
部分中的val name
,无论是在构造函数参数列表中还是作为成员属性
预期的类构造函数不能有属性参数
因此,有必要使用val name:String
“Bar”的实际构造函数没有相应的预期声明
但是,要使实际构造函数与预期声明匹配,参数的数量必须相同。这就是为什么除了存在属性之外,构造函数中还添加了参数
expect class Bar(name: String) {
val name: String
}
actual class Bar actual constructor(actual val name: String)
注意:如果我们将预期类的构造函数保留为空,我们将看到IDE在当前类中添加构造函数时如何抱怨不兼容
GL如果我这样做,我会得到预期的类构造函数不能有属性参数
。实际类仍应能够将其作为属性构造函数参数实现。如果这样做,则无法实例化该类:预期的类栏没有默认构造函数。
。哪一行出现此错误?我不明白为什么需要一个默认构造函数。虽然这段代码可以回答这个问题,但提供关于为什么和/或这段代码如何回答这个问题的额外上下文可以提高它的长期价值。是的@Braian,有了您的经验,您应该更清楚:)我不赞成删除,但请添加一个类似的解释,说明为什么需要添加val
。感谢您的反馈。更新答案。尝试从expect类中删除构造函数。