在Kotlin文档中,显示的用于调用泛型函数的示例如下所示:
fun <T> singletonList(item: T): List<T> {
}
val l = singletonList<Int>(1)
我遇到了以下代码:
val binding = DataBindingUtil.inflate<FragmentPlantDetailBinding>(
inflater, R.layout.fragment_plant_detail, container, false).apply {
}
}
和inflate方法如下:
public static <T extends ViewDataBinding> T inflate(@NonNull LayoutInflater inflater,
int layoutId, @Nullable ViewGroup parent, boolean attachToParent) {
return inflate(inflater, layoutId, parent, attachToParent, sDefaultComponent);
}
我以为我了解调用泛型函数的工作原理,但是在第二个示例中,该函数具有4个参数。那么,FragmentPlantDetailBinding是指什么呢?在膨胀方法中甚至没有使用T。应该注意的是,inflate方法是Java代码,而DataBindingUtil.inflate是Kotlin代码。从Kotlin到Java的转换在这里发生了什么?
在Kotlin文档示例中,很明显<T>
是函数用于参数和返回值的类型。但是在该示例中,只有一个参数,因此很明显。但是,如果有多个参数,它指的是什么?
答案 0 :(得分:1)
您会看到here:
public static <T extends ViewDataBinding> T inflate(
LayoutInflater inflater,
int layoutId,
@Nullable ViewGroup parent,
boolean attachToParent
) {
return inflate(inflater, layoutId, parent, attachToParent, sDefaultComponent);
}
T
指定inflate
的返回类型。
因此,您的变量binding
的类型为FragmentPlantDetailBinding
。