Скажем, у меня есть
HashMap<?, List<?>> map = new HashMap<>();
map.put(String.class, new ArrayList<Long>());
Следующий код будет скомпилирован.
Однако я хочу потерпеть неудачу при компиляции, потому что ArrayList не для типа String.
Кроме того, мой подстановочный знак ограничен каким-то конкретным интерфейсом (например, Exception), поэтому я полагаю, что должен где-то поместить этот <? extends Exception>
.
Как я могу достичь вышеизложенного?
Пример теста:
map.put(String.class, new ArrayList<String>()); //Fail because String is not an Exception
map.put(IOException.class, new ArrayList<FileNotFoundException>()); // Fail because FileNotFoundException is not an IOException even though it is a subclass of it
map.put(FileNotFoundException.class, new ArrayList<IOException>()); // I suppose I'm fine with this.
map.put(IllegalArgumentException.class, new ArrayList<IllegalArgumentException>()); // Succeed
map.put(NumberFormatException.class, new ArrayList<ServerException>()); // Fail again because the two classes don't match
map.put(ClientDecodingException.class, new ArrayList<ClientDecodingException.class>); // Succeed again since the map takes in a wildcard Exception
Map<Class<T>, List<T>>
? - person Luiggi Mendoza   schedule 21.05.2015<T>
, и тогда ваша карта может содержать только классы/списки этого типа - у вас не может быть одновременно T = String и T = IOException. - person yshavit   schedule 21.05.2015class MapOfClass
, который работает как оболочка дляMap<Class, List>
(я буду использовать необработанные типы только в качестве примера) и имеет методpublic <T> List<T> put(Class<T> clazz, List<T>> list)
. Это более подробно, но может решить проблему ОП. - person Luiggi Mendoza   schedule 21.05.2015Map<Class<?>, List<?>>
.) Но конкретные требования OP не могут быть выполнены на Java. - person yshavit   schedule 21.05.2015