通用函数中的多个参数

时间:2018-11-21 09:04:36

标签: kotlin

在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>是函数用于参数和返回值的类型。但是在该示例中,只有一个参数,因此很明显。但是,如果有多个参数,它指的是什么?

1 个答案:

答案 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