在 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 */ }
}
最佳答案
而不是
ArrayList<Data> theDataList = new ArrayList<Data>();
你应该使用:
List<Data> theDataList = new ArrayList<Data>();
关于java - 如何使带有 List<> 的 kotlin 函数可从 Java 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51527902/