Java泛型在类型参数中扩展

时间:2014-12-18 17:15:28

标签: java generics

我最近在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){/**/}

但我如何在方法成员中使用相同的技巧?

1 个答案:

答案 0 :(得分:0)

PECS (Producer Extends and Consumer Super)是去这里的方式。尝试使用? super Value

Here是一篇帖子,可能会为您提供更多相关内容。