public abstract class Request<T, R extends Request> implements Serializable {}
Итак, у нас есть два универсальных типа. T
, который может быть любым типом, и R
, который должен расширяться Request
. Но для Request
все еще требуются два параметра.
В Java это проще, так как генерики не так строги, и мы можем использовать необработанный тип.
В Kotlin это будет выглядеть так: abstract class Request<T, R : Request<*, *> : Serializable
, но тогда у нас есть ошибка: This type parameter violates Finite Bound Restriction.
Итак, нам нужно как-то указать аргумент второго типа.
Я не уверен, что это правильный путь для вашего случая, но вы можете сделать следующее:
abstract class Request<T, R : Request<*, R>> : Serializable {
abstract val dummy: R
}
class ExampleRequest<T, N> : Request<T, ExampleRequest<T, N>>() {
override val dummy: ExampleRequest<T, N> get() = this
}