这是编译器的一个角落.为了确定是否应用将参数包装到数组中或简单地传递数组,它需要知道最后一个参数的类型,然而,在lambda表达式的情况下,它需要调用方法签名来确定类型.但是很明显,应该发生什么,因为lambda表达式永远不会是数组类型,所以javac编译它没有问题.

一个可以接受的解决办法是超载方法:

@SafeVarargs

public static Stream filter(Stream source, Predicate... predicates) {

return source.filter(

Arrays.stream(predicates).reduce(predicates[0], Predicate::and));

}

public static Stream filter(Stream source, Predicate predicate) {

return source.filter(predicate);

}

这将是一个可以接受的解决方案,因为它不需要任何改变的呼叫方,同时提高单一案件的效率在同一时间.

请注意,您的varargs方法允许零参数,但如果以这种方式调用将失败.所以你应该添加另一个超负荷:

public static Stream filter(Stream source) {

return source;

}

或使方法对于零参数情况是安全的:

@SafeVarargs

public static Stream filter(Stream source, Predicate... predicates) {

return Arrays.stream(predicates).reduce(Predicate::and)

.map(source::filter).orElse(source);

}

java表达式的类型_java – 此表达式的目标类型必须是功能界面相关推荐

  1. Java 8新特性探究(6):泛型的目标类型推断

    简单理解泛型 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.通俗点将就是"类型的变量".这种类型变量可以用在类.接口和方法 ...

  2. java常量表达式是什么_Java常量表达式和代码消除

    如 here所述,javac和其他Java编译器可能为条件为 "Constant Expression"的if语句提供代码消除功能. 如果我的代码使用依赖于不同包中定义的其他常量表 ...

  3. java中输入char类型_java中如何输入char类型

    java中基本数据类型的输入包括整形的输入:in.nextInt();单精度浮点型:in.nextFloat();双精度浮点型:in.nextDouble();字符串类型:in.next();in.n ...

  4. java八种语言_Java语言八种基本类型

    Java语言八种基本类型 (2009-12-21 13:37:45) 标签: 杂谈 Java语言是一种严格的"类型化"语言.这意味着每个变量都必须有一个声明好的类型.Java语言提 ...

  5. java单精度实型_Java的八种基本类型及其各种数据类型的相互转换

    一.八种基本类型 1.六种数字类型(四个整数型,两个浮点型) 字节型byte 8位-2^7到2^7短整型short 16位 整型int 32位 长整型long   64位 单精度float 32位   ...

  6. java timestamp是什么类型_JAVA比较2个Timestamp类型的时间大小-由此引发的思考

    今天忽然要对2个Timestamp变量的类型进行比较.没怎么用过,百度发现居然很多都是转换类型的.后面发现Timestamp自己都有方法进行比较.但是百度一堆都是那些要转换类型的.我就想简单的知道2个 ...

  7. java协变返回类型_Java中的协变返回类型

    java协变返回类型 协变返回类型 (Covariant return type) The covariant return type is that return type which may va ...

  8. java union pay 代码_Java标记了union / sum类型

    使用一个私有构造函数创建一个抽象类,并在类中嵌套"数据构造函数"(左侧和右侧静态工厂方法),以便它们可以看到私有构造函数,但没有其他任何东西可以有效地密封类型. 使用抽象方法eit ...

  9. java比较时间戳大小_JAVA中两个String类型的时间戳怎么样比较大小?

    1.从数据库里面获得的时间戳是String类型的,要与当前时间比较,判断登陆是否过期 生成一long类型的当前时间,把String类型强制转换成long类型报错,代码如下: long currentT ...

最新文章

  1. Python:爬虫框架Scrapy的安装与基本使用
  2. TIOBE 8 月编程语言:C、Java 差距拉大,R 语言盛行
  3. ntu part-time phd 信息整理
  4. Ansible Playbook详解
  5. Altium designer中提示some net were not able to be matched问题解决办法
  6. Matlab和C++混合编程
  7. 因吵架总被骂,阿里程序猿一气之下发明“情侣吵架神器”
  8. Linux下设置python脚本文件为服务
  9. 距离一个优秀程序员,你还差多少?
  10. 送书 |《Python大数据与机器学习实战》
  11. ubuntu 版mysql客户端工具_ubuntu安装mysql可视化工具MySQL-workbench及简单操作
  12. jdk15的安装与配置
  13. typeorm实战之findOne()方法
  14. 【扫盲】硬盘接口『 SATA 、 mSATA 、 m.2 ( NGFF )、PCI-E ( PICe 、 PCI Express ) 』及其协议 『 NVMe 、 AHCI 』
  15. 功能强大,颜值在线的个人笔记应用 - Notion
  16. 二层三层网络协议-网关
  17. 制度化规范化标准化精细化_何为规范化、标准化、精细化管理
  18. 关于SWOT,你了解多少?
  19. 本原多项式 M序列和AES不可约多项式
  20. 【CS224n】(assignment3)Dependency Parsing

热门文章

  1. vue页面锚文本_Vue如何实现锚点定位功能?
  2. easyui不同的jsp页面之间混乱_JSP+SSM+Mysql实现的图书馆预约占座管理系统
  3. ASTreeView 1.4.0发布(ASP.NET树控件)
  4. osg geometry清空vertex
  5. ADB工具 获取ROOT权限及复制文件方法
  6. 如何dos中查看当前MySQL版本信息?
  7. 修改eclipse中java和xml页面的字体的样式
  8. JSP Unable to compile class for JSP
  9. leetcode 70 python (动态规划)
  10. leetcode 1185 python