如何将Java泛型转换为Kotlin语言泛型

时间:2019-09-30 01:39:44

标签: kotlin

如何将Java泛型转换为Kotlin语言泛型

java代码:

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

但是kotlin代码:如何做?

3 个答案:

答案 0 :(得分:0)

您只需使用the Java-to-Kotlin converter并获得

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

但是第二个Requestextends Request中的那个)是raw type,它不应该在Java中使用,并且很高兴在Kotlin中不受支持。很有可能应该改为Request<T, R>;然后翻译在Kotlin中也使用Request<T, R>

答案 1 :(得分:0)

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
}

答案 2 :(得分:-1)

根据我的需要,我终于意识到了这一点。

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){

}