小编Wyt*_*tze的帖子

Java 8 Stream丢失了类型信息

我有以下流来选择符合特定条件的对象:

    protected final Map<String, PropertyMapping> propertyMappings = new LinkedHashMap();

    public List<PropertyMapping> getPropertyMappingsByAnnotation(final Class annotation) {
        return propertyMappings.values()
            .stream()
            .filter(pm -> pm.getAnnotation(annotation) != null)
            .collect(Collectors.toList());
    }
Run Code Online (Sandbox Code Playgroud)

过滤器以某种方式导致Stream失去对流的泛型类型的跟踪,导致collect语句失败并出现以下错误:

incompatible types: java.lang.Object cannot be converted to java.util.List<PropertyMapping>
Run Code Online (Sandbox Code Playgroud)

如果我将过滤器更改为pm - > true,例如流再次起作用.导致这种行为的原因是什么方法可以避免这种情况?它可能与传入的'annotation'类有关.我试图传递一个final修饰符,看看是否能修复问题.

这是getAnnotation方法的签名:

public final <T extends Annotation> T getAnnotation(Class<T> annotationClass)
Run Code Online (Sandbox Code Playgroud)

java java-stream

3
推荐指数
1
解决办法
795
查看次数

标签 统计

java ×1

java-stream ×1