问题标签 [method-reference]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2907 浏览

java - Why did Java 8 introduce a new "::" operator for method references?

In Java 8 method references are done using the :: operator.

For Example

You can see that the addableViaMethodReference now acts like an alias to AddableUtil::addThemUp. So addableViaMethodReference() will perform the same action as AddableUtil.addThemUp() and return the same value.

Why did they choose to introduce a new operator instead of using an existing one ? I mean, execute a function when the function name ends with () and return the function reference when there is no trailing ().

Method Execution

Method reference

Wouldn't this be much simpler and intuitive ? AFAIK, AddableUtil.addThemUp doesn't currently (Java 7) serve any other purpose and throws a compilation error. Why not use that opportunity instead of creating an entirely new operator ?

0 投票
3 回答
248 浏览

java - 如何将具有动态值的 lambda 过滤器转换为方法引用

我有一些 Java 代码可以根据一些输入过滤列表。它目前使用 lambda,例如:

我想要做的是将过滤器逻辑移动到另一种方法,使其可重用且易于单元测试。所以我想使用方法引用来代替传递给过滤器方法的 lambda。如果过滤器逻辑是相当静态的(即允许的标签列表在编译时已知),则很容易做到,但我无法弄清楚如何使用过滤器中的动态数据来做到这一点。

我想要的是某种使用方法引用然后传递第二个动态参数的方法,即

那么有没有可能做我想做的事,或者我可能错误地处理了这种情况?

0 投票
1 回答
1345 浏览

java - 是否可以将方法引用转换为 MethodHandle?

是否可以将方法引用(例如SomeClass::someMethod)转换为MethodHandle实例?我想要编译时检查的好处(确保类和方法存在)以及使用MethodHandleAPI 内省方法的能力。

用例:当且仅当请求不是由特定方法触发时(以避免无休止的递归),我有需要执行的代码。我想要一个编译时检查来确保类/方法存在,但是运行时检查来比较调用者和方法。

回顾一下:是否可以将方法引用转换为 aMethodHandle

0 投票
1 回答
2326 浏览

kotlin - 如何解决方法引用中的重载歧义?

假设我想将 java 方法分配给方法类型Log.d(String, String)的变量,我这样做:x(String, String) -> Int

编译器说:

显然还有第二种方法Log.d(String, String, Throwable),但我如何告诉编译器我想要哪一种?

0 投票
2 回答
5326 浏览

java - 方法参考的组成

这与这个问题有关:How to do function composition?

我注意到可以将方法引用分配给声明为 的变量Function,因此我假设它应该具有andThenorcompose功能,因此我希望我们可以直接组合它们。但显然我们需要先将它们分配给声明为 first 的变量(或Function在调用之前进行类型转换),然后才能调用它们。andThencompose

我怀疑我可能对这应该如何工作有一些误解。

所以我的问题:

  1. 为什么在调用andThen方法之前需要先进行类型转换或将其分配给变量?
  2. 它需要以这种方式完成的方法引用的类型到底是什么?

下面的示例代码。


关于错误的更多描述

在 Eclipse 中,它以错误消息突出显示:

此表达式的目标类型必须是函数式接口

关于功能接口的 Eclipse 错误

在 Java 8 编译器中,错误是:

(实际上,为什么 Eclipse 中的错误与 Java 8 编译器中的错误不同?)

0 投票
2 回答
886 浏览

java - 实例方法参考。没有找到合适的方法

我介绍了 java 8 的新特性。

我有以下课程:

和以下调用:

之后我看到以下错误:

请解释我做错了什么?

0 投票
2 回答
1634 浏览

java - 为什么 Java 8 中的 lambda 表达式需要在其中使用的变量使用“final”修饰符,但在使用方法引用时不需要?

考虑以下课程:

为什么我得到编译错误obj -> f.handle(obj),但没有f::handle

0 投票
3 回答
1899 浏览

java - 在局部变量上调用的 Java 8 方法引用

我在学习 Java 8 的过程中遇到了一些我觉得有点奇怪的东西。

考虑以下代码段:

基本上,我需要将调用的输入集映射relationships到不同的类型,以符合我正在使用的 DAO 的 API。对于转换,我想使用RelationshipTransformerImpl我实例化为局部变量的现有类。

现在,这是我的问题:

如果我要修改上面的代码如下:

我显然会得到一个编译错误,因为局部变量transformer不再是“有效的最终”。但是,如果将 lambda 替换为方法引用:

然后我不再收到编译错误!为什么会这样?我认为编写 lambda 表达式的两种方法应该是等价的,但显然还有更多事情要做。

0 投票
1 回答
9209 浏览

java - Java8中不同参数方法的引用

我想知道所有这些带有方法引用和功能接口的东西如何在较低级别上工作。最简单的例子是我们有一些列表

现在我们想用 Collections 类对其进行排序,所以我们可以调用:

但是如果我们定义自定义比较器,它可能是这样的:

问题在于它Collections.sort需要两个参数:List 和 Comparator。由于 Comparator 是函数式接口,它可以替换为具有相同签名(参数和返回类型)的 lambda 表达式或方法引用。那么,String::compareToIgnoreCase当这些方法的签名不匹配时,当它引用一个只接受一个参数的实例方法时,传递方法引用是如何工作的呢?Java8 中的方法引用是如何翻译的?

0 投票
1 回答
6739 浏览

java - Invoking toString via method reference in Java 8

What am I missing? Why do I have to use Object::toString below and not Integer::toString? Does it have anything to do with type erasure with generics?