强制执行上限通配符的类型?

时间:2012-12-12 01:08:53

标签: java generics

我有一个变量,它有几个上限的通配符,如下所示:

private Map< Class< ? extends MyClass1 >, List< ? extends MyClass2< ? extends MyClass3, ? extends  MyClass1> > > _variableName;

有没有办法强制绑定值? extends MyClass1对于Class类的Type和MyClass2类的第2个param是否相同?

1 个答案:

答案 0 :(得分:3)

是:

    public class Foo<T extends MyClass1> {
        private Map< Class<T>, List<? extends MyClass2<? extends MyClass3, T>>> bar;
        ...
    }

您也可以使用通用方法执行此操作。这取决于您希望在何处进行保证(以及扩展,实例化Map的位置),定义类或调用实例化此Map的方法时。

更新:

在回应(正确)观察到这张地图只包含一个元素时,提问者可能会考虑到这一点:

    public class Foo {
        private Map<Class<? extends MyClass1>, List<? extends MyClass2<? extends MyClass3, ? extends MyClass1>>> bar;

        public <T extends MyClass1> void add(Class<T> myClass, List<? extends MyClass2<? extends MyClass3, T>>> myList) {
            bar.put(myClass, myList);
        }

        ...
    }

假设这是向私有地图添加元素的唯一方法,那么确保类型始终匹配。