Несколько параметров в универсальной функции - PullRequest
0 голосов
/ 21 ноября 2018

В документации 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?Т даже не используется в методе надувания.Следует отметить, что метод inflate - это код Java, а DataBindingUtil.inflate - код Котлина.Что-то происходит здесь, когда выполняется переход от Kotlin к Java?

В примере документа Kotlin ясно, что <T> - это тип, который функция использует как для параметра, так и для возвращаемого значения.,Но в этом примере есть только один параметр, так что это очевидно.Но если есть несколько параметров, к чему это относится?

1 Ответ

0 голосов
/ 21 ноября 2018

Как вы можете видеть здесь :

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...