无法在Kotlin多平台中访问预期的类构造函数参数

时间:2019-05-06 12:54:32

标签: kotlin kotlin-multiplatform

我目前正在使用kotlin开发多平台模块。为此,我依靠expect/actual mechanism

我在Common.kt中声明了一个简单的类:

expect class Bar constructor(
    name: String
)

我想在通用方法(也出现在Common.kt中)中使用定义的类:

fun hello(bar: Bar) {
    print("Hello, my name is ${bar.name}")
}

实际的实现在Jvm.kt中定义:

actual data class Bar actual constructor(
    val name: String    
)

问题是我的hello函数内部出现以下错误

  

未解决的参考:名称

我在做什么错了?

2 个答案:

答案 0 :(得分:0)

它也应该在val name部分的expect中,无论是在构造函数参数列表中还是作为成员属性。

答案 1 :(得分:0)

预期的类构造函数不能具有属性参数

因此,有必要使用val name: String

将属性描述为类成员。

“ Bar”的实际构造函数没有相应的预期声明

但是,为了使实际构造函数与期望的声明匹配,参数的数量必须相同。这就是为什么除了存在属性之外,还在构造函数中还添加了{strong}参数的原因。{p}

name: String

注意:如果我们将构造函数保留为预期类的空白,则会看到IDE在当前类中添加构造函数以解决不兼容问题时的抱怨。

GL