将子类型添加到泛型列表

hfwmuf9z  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(437)

我试图将异常添加到一个Map中,其中包含字符串作为键,异常列表作为值,如下所示。我试图实现的是创建一个泛型方法,该方法可以接受一个以键作为字符串的Map和一个可以包含任何类型异常的列表,如果键是同一类型的,则将异常添加到该特定列表中。

public static void addToMap(Map<String,List<? extends Exception>> exceptionMap,String nodeKey ,Exception exception){
exceptionMap.computeIfAbsent(nodeKey ,K->new LinkedList<Exception>).add(exception);

注意:我可以将异常分别添加到两个不同的util方法…但是我希望它更通用一个单一的util方法,如上图所示。。。
我无法将这两个不同的例外添加到泛型util方法中,我不知道哪里出错了…非常感谢您的帮助

dvtswwa3

dvtswwa31#

你不应该在这里使用通配符。仅当您不关心确切的类型时才使用通配符。但在这里,您确实关心异常列表的确切类型。也就是说,这两个 ??? 必须相互兼容:

void addToExceptionMap(Map<String, List<???>> exceptionMap, String errorLevel, ??? exception)

最后一个参数不能是任何 Exception ,列表的类型不能是任何类型 Exception . 不能添加 NullPointerException 一份 IndexOutOfRangeExceptions ,你能吗?这两种类型是相关的。
您应该在此处使用泛型:

public static <T extends Exception> void addToExceptionMap(Map<String, List<T>> exceptionMap, String errorLevel, T exception){
    exceptionMap.computeIfAbsent(errorLevel,K->new LinkedList<T>()).add(exception);
}

相关问题