java 流API、类和强制转换

5us2dqdw  于 2023-03-21  发布在  Java
关注(0)|答案(1)|浏览(121)

我有这两种方法:

Set<Class<?>> findAllClassesUsingClassLoader(String packageName)

void addNotRetryableExceptions(Class<? extends Exception>... exceptionTypes)

这段代码不会编译,即使它运行起来没有任何问题:

findAllClassesUsingClassLoader("my.project.exception").stream()
     .filter(RuntimeException.class::isAssignableFrom)
     .map(x -> x.asSubclass(RuntimeException.class)) // Type mismatch: cannot convert from Class<capture#14-of ? extends RuntimeException> to Class<RuntimeException>
     .forEach(recoverer::addNotRetryableExceptions);

我该如何正确地解决这个问题?

eivgtgni

eivgtgni1#

我尝试了从Java 8到17的几个JDK版本,都不能用javac重现这个错误,所以这似乎是Eclipse编译器的问题。
您可以使用

.<Class<? extends RuntimeException>>map(x -> x.asSubclass(RuntimeException.class))

但我也认为编译器没有理由在这里推断Class<RuntimeException>,所以我认为,javac是正确的,Eclipse的编译器有一个bug。

相关问题