Как преобразовать дженерики Java в дженерики языка котлин - PullRequest
0 голосов
/ 30 сентября 2019

Как преобразовать дженерики Java в дженерики языка котлина

Java-код:

public abstract class Request<T, R extends Request> implements Serializable {}

Но код котлина: Как это сделать ???

Ответы [ 3 ]

0 голосов
/ 30 сентября 2019

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
}
0 голосов
/ 30 сентября 2019

В соответствии с моими потребностями я наконец-то понял это.

Open abstract class Request < T, out R > (url: String): Serializable where R: Request < T, R > {}
Open class GetRequest < T > (url: String): Request < T, GetRequest < T > (url){

}

0 голосов
/ 30 сентября 2019

Вы можете просто использовать конвертер Java-Kotlin и получить

abstract class <T, R : Request<*, *>> : Serializable

Но второй Request (тот, что в extends Request) является необработанным типом , который не должен использоваться в Java и, к счастью, не поддерживается в Kotlin. Очень вероятно, что вместо этого должно быть Request<T, R>;тогда перевод использует Request<T, R> и в Kotlin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...