Intereting Posts
Оператор == не может применяться к «Long» и «Int» в Kotlin Как я могу делегировать реализацию изменчивому свойству в Котлин? Определение оси масштабирования ScaleAnimation Мой проект Kotlin Не удается разрешить зависимости от Travis-CI rx.Scheduler не может быть предоставлен без @ Provides- или @ Produces-аннотированного метода Аргументы по умолчанию Kotlin: запретить вызовы с нулевыми аргументами При развертывании плагинов intellij копируются только зависимости. Ошибка обратного вызова OnSuccessListener Firebase Storage Почему Котлин держит MetaData в файле класса Kotlin? Могу ли я использовать Coroutines Котлина, используя их в Java-коде? @PrePersist Вариант EventListener для spring-data-mongo Захват объектов с помощью JMockit и Kotlin Как безопасно решить эту нулевую проверку в инициализаторе? начать Намерение с контактом как vCard в строке Kotlin: Как работать со списками: Непроверено В ролях: kotlin.collections.List <Kotlin.Any?> To kotlin.colletions.List <Путевая точка>

Kotlin vs. Java: функция вызова с параметром лямбда

У меня есть эта функция, определенная в файле kotlin

fun loadSubmissions(projectId: Long?, completion: (List<Submission>, Exception) -> Unit) { ... } 

И хотите назвать это с Java, как это

 loadSubmissions(project.getProjectId(), (submissions, e) -> { updateSubmissions(submissions); return null; }); 

с

 void updateSubmissions(List<Submission> submissionList) { .. } 

Но это дает мне

 Error:(226, 35) error: incompatible types: List<CAP#1> cannot be converted to List<Submission> where CAP#1 is a fresh type-variable: CAP#1 extends Submission from capture of ? extends Submission 

Поскольку я понимаю, что параметр лямбда-функции кажется List<CAP#> вместо ожидаемого и определенного List<Submission>

Если я преобразую класс в java, я могу легко вызвать эту функцию с помощью обратного вызова лямбда.

Что я делаю не так

Вы не указали тип представления переменных, но появляется сообщение об ошибке, указывающее, что это List<? extends Submission> List<? extends Submission> . Это другой тип из List<Submission> , а ссылки первого типа не могут быть назначены переменным последнего типа (хотя, наоборот, все в порядке).

Это представляет для вас как минимум две проблемы:

  • сама лямбда не является правильной, если она вызывает updateSubmissions() , и
  • тип лямбды, который содержит его типы параметров, несовместим с типом второго параметра loadSubmissions() .

Чтобы исправить это, вам нужно либо расширить типы параметров этих двух методов, либо сузить тип представления переменных.