gpt4 book ai didi

java - java 和 kotlin 之间的泛型!!帮我?

转载 作者:搜寻专家 更新时间:2023-10-31 20:31:55 25 4
gpt4 key购买 nike

这是我的代码

[ Kotlin ]

internal abstract class Parent<out T, in V> constructor(
tList: List<T>,
vList: List<V>
) {

abstract fun get(): List<T>
abstract fun set(v: List<V>)

}

[ Java ] - 它继承了 kotlin 类 Parent。

final class Child extends Parent<Number, String> {

public Child(
@NotNull List<? extends Number> tList,
@NotNull List<? extends String> vList) {
super(tList, vList);
}

@NotNull @Override
public List<Number> get() {
return null;
}

@Override
public void set(@NotNull List<? extends String> v) {}

}

父类有称为 T(out)、V(in) 的泛型

所以我觉得..

Child类的构造函数应该是..

public Child(
@NotNull List<? extends Number> tList,
@NotNull List<? super String> vList) {
super(tList, vList);
}

即第二个参数 vList 应该是

List<? super String>

因为父类的 Generic 的 V 是 'in' 但它是..

List<? extends String>

谁能解释一下?帮帮我!

[编辑]...

public Child(
@NotNull List<Number> tList,
@NotNull List<String> vList) {
super(tList, vList);
}

有可能..我问题中的代码只是从IDE生成的代码..

最佳答案

在 Kotlin 中,接口(interface) List 是不可变的,这意味着它是只读的。

这是它的签名:

public interface List<out E> : Collection<E>

所以你的构造函数实际上看起来像这样:

internal abstract class Parent<out T, in V> constructor(
tList: List<out T>,
vList: List<out V>
)

如果你想给 vList 赋值(你用 in 声明),你必须使用 MutableList 接口(interface):

internal abstract class Parent<T, V> constructor(
tList: List<T>,
vList: MutableList<in V>
)

关于java - java 和 kotlin 之间的泛型!!帮我?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50148309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com