首页 / JAVA / Java 1.8.20编译器错误
Java 1.8.20编译器错误
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java 1.8.20编译器错误,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2420字,纯文字阅读大概需要4分钟。
内容图文
![Java 1.8.20编译器错误](/upload/InfoBanner/zyjiaocheng/691/19169fe369c9465689c8db25fbfe67a3.jpg)
以下代码块在1.8.11中可以正常编译,但在1.8.20中会引发错误
private static String calculateSyntheticOrderTypePrice(
FluentIterable<? extends CalculatorProvider> pendingProviders )
{
FluentIterable <? extends CalculatorProvider> mlsLegProvidersAll = pendingProviders.filter(Predicates.and(
IS_MLS_PROVIDER, Predicates.not(IS_SYNTHETIC)));
FluentIterable <? extends CalculatorProvider> mlsLegProvidersNewest = reduceToNewestMlsPrices(mlsLegProvidersAll);
FluentIterable <? extends CalculatorProvider> otherLegProviderAll = pendingProviders.filter(Predicates.and(
Predicates.not(IS_MLS_PROVIDER), Predicates.not(IS_SYNTHETIC)));
FluentIterable <String> mlsHeadPriceTypes = mlsLegProvidersNewest.transform(TO_MLS_SPREAD_PRICE_FUN); /* MLS head: spread price */
FluentIterable <String> orderPriceTypes = otherLegProviderAll.transform(TO_ORDER_TYPE_PRICE_FUN); /* non-MLS orders: option spread or pairs */
FluentIterable <String> formattedOrderHeadPriceTypes = orderPriceTypes.transform(new FormatOrderTypePriceFun(creditOrDebit(otherLegProviderAll)));
FluentIterable <String> allFormatted = FluentIterable.from(Iterables.concat(mlsHeadPriceTypes, formattedOrderHeadPriceTypes));
return CalculatorValues.rollupStrings(allFormatted);
}
我得到的错误是java:找不到适合过滤器的方法(com.google.common.base.Predicate)
在更新8和20之间是否有更改会影响此代码?我在两种情况下都使用相同版本的guava 17.0(最新版本),唯一的变化是Java中的更新版本.
任何帮助是极大的赞赏.
编辑
显示错误的行是
FluentIterable <? extends CalculatorProvider> mlsLegProvidersAll = pendingProviders.filter(Predicates.and(
IS_MLS_PROVIDER, Predicates.not(IS_SYNTHETIC)));
解决方法:
这很可能是JDK-8051402,它是在JDK 8u11之后引入的,在JDK 8u20中发现的,但是为时已晚,并且在JDK 8u20之后被修复.该修补程序出现在JDK 8u40 early access快照版本b02和JDK 9 early access快照版本b27中.
这是说明问题的最小化代码片段:
public class X {
static Predicate<Number> IS_SYNTHETIC = p -> false;
static Predicate<Number> IS_MLS_PROVIDER = p -> true;
static void calcSynth(Stream<? extends Number> providers) {
Stream<? extends Number> all =
providers.filter(Predicates.and(IS_MLS_PROVIDER,
Predicates.not(IS_SYNTHETIC)));
}
}
class Predicates {
static <T> Predicate<T> and(Predicate<? super T> p1, Predicate<? super T> p2) {
return x -> p1.test(x) && p2.test(x);
}
static <T> Predicate<T> not(Predicate<T> p) {
return x -> !p.test(x);
}
}
这在JDK 8u11的javac上有效,在JDK 8u20上失败,然后在JDK 8u40-b02和JDK9-b27上再次起作用.
内容总结
以上是互联网集市为您收集整理的Java 1.8.20编译器错误全部内容,希望文章能够帮你解决Java 1.8.20编译器错误所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。