带有通配符参数的嵌套通用容器?

时间:2013-01-31 10:39:27

标签: java generics

为了理解java中的泛型,我编写了以下代码。

问题是 - 我应该如何参数化myBox以便接受FilterType <?> myFilterType


public class Generics {

    /**
     * @param args
     */
    public static void main(String[] args) {

        Generics g = new Generics();
        Object myValue = "putThisIntoTheBox";

        FilterType<?> myFilterType3   = g.new FilterType<>(null); //works
        Box myBox3                      = g.create(myFilterType3, myValue); //fails - create won't accept myFilterType3
    }

    public <T> Box<T> create(FilterType<T> type, T value) {
        return new Box<T>(value);
    }

    //CLASSES

    public class FilterType<T>{
        T type;
        public FilterType(T type) {
            this.type = type;
        }
    }

    public class Box<T>{
        T value;
        public Box(T value) {
            this.value = value;
        }
    }

}

1 个答案:

答案 0 :(得分:1)

问题是create方法需要FilterType<T> typeT value参数的一致类型。

这里的值被声明为Object实例,因此它期望类型T generic也是一个Object实例。

声明FilterType<Object> myFilterType3解决了问题。