设计库时何时使用PEC



我正在库上工作,该图书馆大量使用功能界面,目前努力使用PEC是否使用:

Predicate<A>
Function<A,B>
BiFunction<A,B,C>

vs。

Predicate<? super A>
Function<? super A, ? extends B>
BiFunction<? super A,? super B,? extends C>

看起来很混乱,甚至错误消息从:

转向:
Incompatible types: Function<Item, Long> is not convertible to Function<Item, String>

之类的东西
Incompatible types: 
Function<capture of ? super Item, capture of ? extends Long> is not 
convertible to Function<capture of ? super Item, capture of ? extends String>

很难阅读。我已经阅读了以下问题,但仍然很难应用它,因为它污染了库代码并使编译器错误消息恶化。我个人会选择Predicate<A>变体的PCE。

是否有某些指南是否使用PEC?我知道优点和缺点,但我想知道人们真正存储的频率很高,例如字段中的Predicate作为LAMDA和方法参考不受PEC提供的内容的影响。我没有在网络上找到其他建议。这是受此影响的类之一。

在主要帖子下方的评论中广泛讨论:与JDK/标准库的一致性和对齐方式及其对PEC的使用以及通过使用PEC的兼容性提高的PEC是一个很好的论据,这是一个很好的论据使用PEC(至少在设计库时(

最新更新