Дженерики в Kotlin
От: Ночной Смотрящий Россия  
Дата: 29.03.24 17:32
Оценка:
Захотелось тут потыкать палкой в Котлин. И не понимаю как побороть специфику его дженериков.
Есть интерфейс на Котлине:
interface Foo<T: ItemBase> {
  fun Bar(List<T> items)
}

И есть его не дженерик реализация на java
class FooImpl implements Foo<Item> {
  public void Bar(List<Item> items);
}


Компайлер джавы ругается, потому что Котлин вместо List<T> в ифейсе генерит List<? extends ItemBase>.
Как побороть?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: Дженерики в Kotlin
От: elmal  
Дата: 09.04.24 13:41
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Компайлер джавы ругается, потому что Котлин вместо List<T> в ифейсе генерит List<? extends ItemBase>.

НС>Как побороть?
А чем не подходит решение?
class FooImpl implements Foo<Item> {
    public void bar(List<? extends Item> items) {
...
    }
}

Зачем обязательно именно List<Item> items?
Re[2]: Дженерики в Kotlin
От: Ночной Смотрящий Россия  
Дата: 09.04.24 19:28
Оценка:
Здравствуйте, elmal, Вы писали:

E>Зачем обязательно именно List<Item> items?


Реализация уже есть готовая, не хотелось бы ее править.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[3]: Дженерики в Kotlin
От: elmal  
Дата: 09.04.24 19:51
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Реализация уже есть готовая, не хотелось бы ее править.

Самое простое решение в лоб — в котлин проекте интерфейс реализовать на java. Тогда на java проекте ничего править не придется, а если этот интерфейс потребуется использовать в котлин проектах — с ним проблем никаких.

По крайней мере я подобные проблемы примерно так решаю. Интероп там с java хоть и весьма неплохой, но некоторые накладки есть.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.