Я пытаюсь использовать универсальный тип класса в другом классе, который использует этот:
Kotlin
class Callback <O> ()
class Controller <E> (callback: E) where E: Callback<O> {
fun foo1 (a: O) {...}
fun foo2 (): O {...}
}
Java
class Callback <O> {}
class Controller <E extends Callback<O>> {
Controller(E callback) {}
public void foo1(O a) {...}
public O foo2() {...}
}
Простое решение - объявить оба типа E и O в классе Controller следующим образом:
Kotlin
class Controller <E, O> (callback: E) where E: Callback<O> { ... }
Java
class Controller <E extends Callback<O>, O> { ... }
Однако я хочу не объявлять оба типа в конструкторе, потому что информация повторяется, и она не такая красивая.
Редактировать
Мне нужен тип E
в конструкторе, потому что мне нужно определить такие функции, как:
class StringCallback: Callback<String>() { ... }
fun example(callbackParam: Controller<StringCallback>) { ... }
Я хочу, чтобы объект callbackParam
использовал мой определенный StringCallback
, а не какой-либоCallback<String>
.
И помните, что мне также необходим тип O
в классе Controller
для работы с этим типом.Могу ли я «извлечь» или «вывести» его, не объявив его в универсальном конструкторе?
[@ LppEdd с вашего разрешения, я буду использовать ваш класс :)]
Есть идеи?
Заранее спасибо !!