相关疑难解决方法(0)

什么是PECS(制作人扩展消费者超级)?

我在阅读泛型时遇到了PECS(制片extends人和消费者的super简称).

能否给我一个人解释如何使用佩奇之间解决困惑extendssuper

java generics super pecs bounded-wildcard

680
推荐指数
11
解决办法
9万
查看次数

当 Predicate<? 时,强制 Stream::filter 方法在编译时失败 传递 super Object> 而不是 Predicate<? 超级T>

我正在尝试与流 api 一起使用的预定义身份过滤器。不幸的是,我无法正确返回符合流 api 文档的通用谓词。

根据这里的反编译器是Stream::filter定义:

public interface Stream<T> extends BaseStream<T, Stream<T>> {

    Stream<T> filter(Predicate<? super T> var1);
Run Code Online (Sandbox Code Playgroud)

我正面临任何支持 Streams (8~15) 的 Java 版本的问题。这个问题与我的实现无关。这段代码实际上足以重现它:

        Collection<String> result = Stream.of("A", "B", "C")
                                          .filter(new Object()::equals)
                                          .filter(Integer.valueOf(-1)::equals)
                                          .collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)

在这里,应用了两个谓词,它们都不<? super String>符合...

根据这个答案,这种行为似乎很奇怪......

我应该如何防止我的库的用户ServerState通过随机对象相等性检查等进行过滤?

理想情况下,我希望始终返回正确的 Predicate<? super T> 不幸的是,没有任何编译时错误支持......

在这种情况下,使用 linter 不是解决方案。

尽管我知道下限通配符是如何工作的,但我一直缺少的是 aPredicate<? super Integer>可以成功转换为Predicate<? super String>.

在哪里:

Predicate<? super String> stringPredicate = (Predicate<? super String>)Filters.is_tClass(Integer.class, 4);
Predicate<? …
Run Code Online (Sandbox Code Playgroud)

java java-stream

7
推荐指数
1
解决办法
153
查看次数

标签 统计

java ×2

bounded-wildcard ×1

generics ×1

java-stream ×1

pecs ×1

super ×1