Загальний розширювальний клас І реалізує інтерфейс у Kotlin


86

Скажімо, я хочу змінну типу T, яка розширює певний клас і реалізує інтерфейс. Щось на зразок:

class Foo <T : Bar implements Baz> { ... }

Який синтаксис цього слова у Котліні?

Відповіді:


179

Всередині кутових дужок може бути вказана лише одна верхня межа.

Kotlin пропонує різний синтаксис для загальних обмежень, коли існує більше одного обмеження:

class Foo<T>(val t: T) where T : Bar, T : Baz { ... }

а для функцій:

fun <T> f(): Foo where T : Bar, T : Baz { ... }

Це задокументовано тут .


3
Чи є спосіб використовувати його для параметричного типу розваги, наприклад, fun foo (arg: ClassType, InterfaceType) {}? Без додавання параметра параметра до класу
Уфкоку,

1
@Ufkoku, ні, це неможливо зробити: у Kotlin немає типів перетину, а загальні параметри можна оголосити лише явно.
гаряча клавіша

@hotkey У мене є функція нижче: fun <T> wrapClientListener(listener: RemoteController.OnClientUpdateListener): T where T : RemoteController.OnClientUpdateListener, T : NotificationListenerService. Мені все одно тип Т. Але коли я називаю цей метод, Котлін запитує конкретний тип. То як я можу викликати цей метод?
leimenghao
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.