EDIT 1: Изменено название, мое плохое.Kotlin reflection + generics
меня есть интерфейс событие:
interface Event
и некоторые классы, которые реализуют его, как CustomEvent:
class CustomEvent : Event { ... }
То, что я пытался сделать сейчас: учитывая метод, который имеет событие как параметр (так, любой класс, который реализует интерфейс Event), например,
fun onCustomEvent(event: CustomEvent) {
...
}
, Я хочу добавить это событие в список. Таким образом, этот список будет содержать кучу разных событий.
В Java Я верю, что это будет что-то вроде этого (не может быть 100% точным):
List<Class<? extends Event>> eventsList;
....
Class<?> param = methodThatHasSomeEventAsParam.parameterTypes[0];
if (Event.class.isAssignableFrom(param)) {
Class<? extends Event> actualParam = (Class<? extends Event>) param;
eventsList.add(actualParam); // Adds CustomEvent to the events list.
}
Но для Котлин, я действительно не знаю, как правильно использовать дженерики, в частности, что будет правильным способом для перевода
Class<? extends Event>
в Kotlin, сохраняя то же поведение, что и код Java выше.
Заранее спасибо.
В двух словах эквивалент Java ' extends Event> 'is' '. Решает ли ваша проблема? В противном случае было бы легче увидеть ваш код Котлина. Кроме того, см. Раздел [* Generic Variance *] (https://kotlinlang.org/docs/reference/generics.html#variance) ссылки, чтобы узнать о дженериках Котлина, если они заинтересованы. –
hotkey
Woah, на самом деле это действительно решило! Я уже читал документы, и уже пробовал. Но после прочтения вашего комментария я снова попытался и только заметил глупую ошибку в другом месте, которая не заставит ее работать ... Спасибо! :) –
Francisco
@Frank Возможно, вы даже опубликуете ответ, разъясняющий, как он решает его, чтобы, если другие спотыкаются на ваш вопрос, они могут извлечь выгоду из ясности, которую вы получили. – mfulton26