在kotlin中,MyClass具有List成员,并且构建器具有获取List 的功能。
但是在Java代码中,当它调用构建器的fun dataList(dataList: List<Data>)
时,会出现有关
List<> cannot be applied to ArrayList<>
。
从反编译的代码中,它显示列表的类型为kotlin.collections.List<>
。
如何使List <>的功能可从Java调用?
data class MyClass(
val context: Context,
val dataList: List<Data> = emptyList<Data>(),
) {
private constructor(builder: Builder) : this(builder.context, builder.dataList)
class Builder {
private var context: Context? = null
private var dataList: List<Data> = emptyList<Data>()
fun context(context: Context) = apply { this.context = context }
fun dataList(dataList: List<Data>) = apply { this.dataList = dataList }
fun build() = MyClass(this)
}
}
在JAVA中
ArrayList<Data> theDataList = new ArrayList<Data>();
theDataList.add(new Data())
MyClass myClass = new MyClass.Builder()
.context(appContext)
.dataList(theDataList) //<== error
.build();
错误是:
dataList(Java.util.List<com.model.Data>) in Builder cannot be applied to dataList(Java.util.ArrayList<com.model.Data>)
在Java代码中,如果单击dataList(),则会打开反编译的代码,如下所示,并且似乎抱怨
fun dataList(dataList: kotlin.collections.List<com.model.Data>)
:
public final data class Data public constructor(context: android.content.Context,
dataList: kotlin.collections.List<com.model.Data> /* = compiled code */) {
public final val context: android.content.Context /* compiled code */
public final val dataList: kotlin.collections.List<com.model.Data> /* compiled code */
public final operator fun component1(): android.content.Context { /* compiled code */ }
public final operator fun component2(): kotlin.collections.List<com.model.Data> { /* compiled code */ }
public final class Builder public constructor() {
private final var context: android.content.Context? /* compiled code */
private final var dataList: kotlin.collections.List<com.model.Data> /* compiled code */
... ...
public final fun dataList(dataList: kotlin.collections.List<com.model.Data>): com.model.MyClass.Builder { /* compiled code */ }
... ...
public final fun build(): com.model.Data { /* compiled code */ }
}
答案 0 :(得分:3)
代替
ArrayList<Data> theDataList = new ArrayList<Data>();
您应该使用:
List<Data> theDataList = new ArrayList<Data>();