这是我的代码
[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) {}
}
Parent类的Generics名为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生成的代码..
答案 0 :(得分:1)
在Kotlin中,接口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接口:
internal abstract class Parent<T, V> constructor(
tList: List<T>,
vList: MutableList<in V>
)