to List"用 Ja​​va 怎么说?-6ren"> to List"用 Ja​​va 怎么说?-假设我有一个 HashMap> map = new HashMap<>(); map.put(String.class, new ArrayList()); 下面的代码将被编译。 但是,我想编译失败,-6ren">
gpt4 book ai didi

java - "A Map of Class to List"用 Ja​​va 怎么说?

转载 作者:行者123 更新时间:2023-11-30 08:51:54 25 4
gpt4 key购买 nike

假设我有一个

HashMap<?, List<?>> map = new HashMap<>();
map.put(String.class, new ArrayList<Long>());

下面的代码将被编译。

但是,我想编译失败,因为 ArrayList 不适用于 String 类型。

此外,我的通配符仅限于某些特定接口(interface)(例如 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 的键和值之间表达这种通用约束。您可以将 map 声明为

    Map<Class<Exception>, List<Exception>>

但是编译器不知道列表中的异常必须扩展键的类。

除了使用诸如

    <T extends Exception> void addToMap(Class<? extends T> aClass, List<T> aList) { 
map.put(aClass, aList);
}

希望这对您有所帮助。

关于java - "A Map of Class<?> to List<The class>"用 Ja​​va 怎么说?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30383942/

25 4 0
文章推荐: javascript - 导航到 URL 取决于在 javascript 中选择了