将子类型添加到通用列表

Adding Subtype to generic List

我正在尝试将异常添加到包含字符串作为键和异常列表作为值的映射中......如下所示。 我想要实现的是创建一个通用方法,该方法可以接受一个键为 String 的 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 方法中,我不知道我哪里出错了...非常感谢任何帮助

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

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);
}