当前位置: 首页 > 面试题库 >

作为谓词编写的Lambda作为Predicate接口中方法的组合,不会编译

丌官霖
2023-03-14
问题内容

这两种lambda创建方式之间有什么区别?为什么第一个不编译?

Predicate<Integer> predicate = Predicate.isEqual(0).or(Predicate.isEqual(1));

提供: 错误 :不兼容的类型:Predicate<Object>无法转换为Predicate<Integer> = Predicate.isEqual(0).or(Predicate.isEqual(1));

Predicate<Integer> pred21 = Predicate.isEqual(0);
Predicate<Integer> pred22 = pred21.or(Predicate.isEqual(1));

这个作品。


问题答案:

<Integer>isEqual方法调用之前添加应该有帮助:

Predicate<Integer> predicate = Predicate.<Integer>isEqual(0).or(Predicate.isEqual(1));

出现这种编译器行为的原因:

  • isEqual是一个静态的泛型方法,它会返回Predicate<T>(无论其输入参数的实际类型是什么),因此Predicate<Object>在调用该方法时会返回而无需显式指定返回类型。
  • or也是静态的泛型方法,但它返回由相同类型参数化的谓词作为其输入参数(即Predicate<Object>)。


 类似资料:
  • 在查看 '-ios uiautomation' 搜索策略时了解 谓词(Predicate) 十分必要。 UIAutomation JavaScript API有下列几种非常有用的方法: (UIAElement) UIAElementArray.firstWithPredicate(PredicateString predicateString) (UIAElementArray) UIAEleme

  • 问题内容: 我几天前接受采访时,被问到这样的问题。 问:反向链接列表。给出以下代码: 我很困惑,因为我不知道接口对象可以用作方法参数。面试官解释了一下,但我仍然不确定。有人可以启发我吗? 问题答案: 实际上,这是使用接口的最常见和最有用的方法之一。该接口定义了一个契约,您的代码可以与实现该接口的任何类一起使用,而无需了解具体的类- 它甚至可以与编写代码时尚不存在的类一起使用。 Java标准API中

  • 我正在使用spring-data、QueryDSL和MySQL。 返回所有包含姓名的员工(在first_name和last_name中),并从该结果中获得的证书在2014年12月22日至2015年12月22日之间 我尝试了它,但无法获得如何以QueryDSL方式迭代每个员工的每个证书并返回员工列表。 您的回应将非常感谢!!

  • 在编写了自己的通用功能接口并将其用于lambdas之后,我必须在一种新方法中使用它: 将通用数组作为输入处理,检查其最小长度是否为4 处理我的功能界面的任何实例 处理lambda表达式的任何实例,该表达式接受一个参数,但不返回任何内容 应用于函数接口实例的结果(这里我想我必须使用使用者) 以前从未使用过函数接口,有人能解释一下我应该如何将2个函数接口作为方法参数传递吗? 例如:

  • 问题内容: 我无法编译它,甚至可以链接谓词lambda吗? 或唯一的方法是显式创建一个谓词,然后像这样组合: 还是有更多的“功能优雅”的方式来实现同一目标? 问题答案: 您 可以 使用: 但这不是很优雅。如果要直接指定条件,则只需使用一个λ:

  • 我有一个非常简单的语法,如下所示: (我需要使用语义谓词,因为我需要解析关键字可以用作标识符的语言)。 参考:https://github.com/antlr/antlr4/blob/master/doc/predicates.md