我主要使用Java 8,但同时也创建了一个使用Java 6的库,这样其他人也可以在将来使用它,因为它非常有趣。
我现在遇到的问题是我可以通过使用Java 8 Predicate<T>
轻松解决某些问题,但我不确定如何向后移植它。
我看到以下选项可用,但它们有问题或者我不确定如何使用它们:
Predicate<T>
,然而这引入了一个相对较大的依赖,我并不真正需要它,当Java 8用户想要使用Predicate
,然后Google Guava导入{{ 1}}班出现。Predicate
,没有很大的依赖性,仍然与上面提到的问题相同。Predicate<T>
这样的自定义名称,因为 Tess 在我的项目中将是相关名称,也不会感觉很好。TessPredicate<T>
,因为它除了使用正则表达式之外还是谓词,因此您还可以对元素进行计算。银行代码等通常需要一些您需要计算的校验和。实现为功能接口,这可能是最可行的吗?RegexVerficationPredicate
,这是否可能?我该如何解决这个问题?
答案 0 :(得分:2)
由于在这些界面中大量使用java.util.function
和default
方法,您无法向后移植static
包。这样的后卫看起来会有很大不同。
我建议尽可能减少创建自己的Predicate<T>
接口,即使用与Java 8 Predicate<T>
具有相同签名的单一抽象方法。具有相同的接口名称和方法签名,如众所周知的行为,如自我文档。
这意味着使用Java 8的程序员仍然可以使用lambda表达式或方法引用来实现谓词(甚至不导入interface
)。使用Java 8谓词就像将predicate::test
传递给您的方法一样简单。
仅为一个界面为整个第三方库添加依赖关系对我来说很难看。
答案 1 :(得分:1)
我建议使用番石榴。当我第一次使用它的时候,我的想法是一样的(依赖性太大)然后随着时间的推移,我开始使用番石榴提供的其他功能,现在我不明白如何在没有它们的情况下(这些是我现在必须拥有的工具)代码更清晰,更快速,更易于维护。
java SDK(特别是java 8)从Guava中获取了很多功能这一事实说明了很多......因此即使你很难编写自己的实现,长期使用库也更为可取......