gpt4 book ai didi

Java 8 Stream 丢失类型信息

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:22:38 29 4
gpt4 key购买 nike

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

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

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

incompatible types: java.lang.Object cannot be converted to java.util.List<PropertyMapping>

例如,如果我将过滤器更改为 pm -> true,流将再次运行。是什么导致了这种行为,有没有办法避免这种情况?它可能与传入的“注释”类有关。我尝试传递最终修饰符以查看是否可以解决问题。

这是 getAnnotation 方法的签名:

public final <T extends Annotation> T getAnnotation(Class<T> annotationClass)

最佳答案

我能看到的明显问题是您正在尝试传递一个普通的 Class变量作为期望 Class<T> 的方法的参数其中 <T extends Annotation> .我想编译器无法完全确定该方法的调用,并且它导致了流链末尾的编译错误。如果你解决了这个问题,你的神秘问题可能就会消失。

像这样:

public <T extends Annotation> List<PropertyMapping> 
getPropertyMappingsByAnnotation(Class<T> annotation) {

关于Java 8 Stream 丢失类型信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39487667/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com