如何将Java泛型转换为Kotlin语言泛型
java代码:
public abstract class Request<T, R extends Request> implements Serializable {}
但是kotlin代码:如何做?
答案 0 :(得分:0)
您只需使用the Java-to-Kotlin converter并获得
abstract class <T, R : Request<*, *>> : Serializable
但是第二个Request
(extends 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){
}