【问题标题】:Why functional interface used in Java Lambda expression [closed]为什么在 Java Lambda 表达式中使用函数式接口 [关闭]
【发布时间】:2021-07-03 06:44:13
【问题描述】:

我知道函数式接口在 Java lambda 表达式中是如何工作的。 但只是想知道 Java 没有提供某些类型(函数或 Lambda)来定义 lambda 表达式,例如Lambda l = () -> xxxxxx;

我了解使用接口可以具有向后兼容性。 但是为什么定义一个新的数据类型不是一个好习惯(覆盖??)

谢谢!

【问题讨论】:

  • 我不确定我是否正确理解了您的问题。你是在问我们为什么不写... new Comparator<Foo>{ @Override public int compare(Foo lhs, Foo rhs) { ... } }; 之类的东西?
  • 你见过various java.util.function types吗?如果您没有:例如Supplier<Xxxxxx> xSupplier = () -> xxxxxx。如果你见过他们,你能澄清你的问题吗?
  • Lambda 表达式可以有不同的返回类型和参数,参数有不同的名称。功能接口也提供了解释该方法应该做什么的文档。您将如何建议仅以两种新类型提供所有这些功能? (我不清楚你的最后一句话——如果你能澄清一下就好了。)基本上,不清楚你认为应该发生什么而不是使用函数式接口。

标签: java lambda java-8


【解决方案1】:

但只是想知道 Java 没有提供某些类型(函数或 Lambda)来定义 lambda 表达式,例如Lambda l = () -> xxxxxx;

恕我直言,不提供新类型(基本上是接口)的原因很少:

  • 因为子函数是函数接口,所以函数/Lambda 接口必须是标记接口。在这种情况下,FunctionalInterface 注释做同样的工作,甚至更好。我们在这里:https://docs.oracle.com/javase/8/docs/api/java/lang/FunctionalInterface.html
  • 但是为什么我们选择注释而不是标记接口,即使它们具有相同的含义?如果您有 Function / Lambda 接口,这意味着所有实例都是可互换的。当初始 lambda 时,Java 怎么知道应用哪个接口函数?这是个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    相关资源
    最近更新 更多