我最近在Java项目中遇到了泛型问题。以下是我实际问题的简化版本。
abstract class Value{
public int value;
Value(int v){ value = v; }
}
class Wrap<T> {
T data;
Wrap(T data){ this.data = data; }
public void add(T value){
data = actualAdd(data, value);
}
public T actualAdd(T p1, T p2){/* other code. don't worry */}
}
很容易看到,之后我想继承Value
。
但是当要结合两者时,即:
Wrap<? extends Value> wrapValue;
我真的希望add
收到Value
,即:
wrapValue.add(Value value)
而不是
wrapValue.add(? extends Value value)
因为我只是想把这个值加起来,所以其他字段都无关紧要。
我知道如何在静态方法中做到这一点,应该是:
public static void staticAdd(Wrap<? extends T> wrapper, T value){/**/}
但我如何在方法成员中使用相同的技巧?
答案 0 :(得分:0)
PECS (Producer Extends and Consumer Super)
是去这里的方式。尝试使用? super Value
。
Here是一篇帖子,可能会为您提供更多相关内容。