问题标签 [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 回答
2840 浏览

java - 方法引用转换如何工作?

两者都是具有相同签名的实例方法。为什么一个有效而另一个无效?

签名String::toUpperCaseString toUpperCase();

0 投票
1 回答
453 浏览

java - 对数组 clone() 的方法引用导致 NoClassDefFoundError: Array

当我运行这段代码

它按预期工作,我得到了输出

但是,如果我用方法引用替换 lambdaclone()

我得到一个运行时异常:

我完全不明白这一点。我会认为方法引用和 lambda 是等价的。此外,这似乎是一个非常奇怪的例外。谁能解释一下?

我正在使用 JDK 1.8.0_25。

0 投票
1 回答
321 浏览

java - 具有静态成员的非静态访问的 Java 8 类型推断

考虑以下代码:

前几天我无意中以非静态方式调用静态方法时遇到了这个问题。我知道您不应该以非静态方式调用静态方法,但我仍然想知道,为什么在这种情况下无法推断类型?

0 投票
3 回答
1222 浏览

java - 在 Java 流中拆分对象

我想知道是否可以在 Stream 中拆分对象。例如,为此Employee

我想在流中执行一些操作。为简单起见,让它变成这样(假设我的代码架构不允许将它放在 Employee 类中 - 否则太容易了):

现在看起来像这样:

问题是,是否可以将一些代码放入这样的流中?

我想达到什么目的?- 我想如果我可以映射一些对象字段,然后像.forEach(this::someOperationWithEmployee)代码可读性一样处理它们,会稍微提高一些。


2015 年 5 月 14 日更新

毫无疑问,在这种情况下将Employee对象传递给someOperationWithEmployee是最漂亮的解决方案,但有时我们在现实生活中无法做到这一点,应该是 lambdas 的通用解决方案。

0 投票
1 回答
712 浏览

java - 为什么必须为方法引用显式指定类/对象名称?

当我想引用当前范围内的方法时,我仍然需要指定类名(用于静态方法)或操作符this之前:: 。例如,我需要写:

对 来说这不是什么大问题this,但有时静态方法看起来过于拥挤,因为类名可能很长。如果编译器允许我简单地编写,那就太好了::trimmedLength

但是 Java-8 编译器不允许这样做。对我来说,如果类/对象名称的解析方式与普通方法调用的解析方式相同,这似乎是非常一致的。这也将支持方法引用的静态导入,这在某些情况下也很有用。

所以问题是为什么 Java 8 没有实现这样或类似的语法?这种语法会出现什么问题吗?还是根本没有考虑过?

0 投票
3 回答
447 浏览

java - 方法引用和链式谓词

我正在尝试使用方法引用来压缩我的代码。这是我正在尝试改进的一条线:

使用方法参考可能会更好:

但是我可以在谓词中添加“false”吗?

0 投票
3 回答
1366 浏览

java - Java 方法引用具有泛型参数的方法

我正在尝试对具有在类声明中指定的泛型参数的方法进行方法引用。所以我有:

具体来说,我不知道这里可执行文件的具体泛型类型。使用

立即解决问题,但对于这种情况是不可能的。

显然,我做错了什么。但是如何让它发挥作用呢?

谢谢。

0 投票
1 回答
1095 浏览

java - 如何从 LambdaMetafactory 解决“AbstractMethodError”

AbstractMethodError从调用由调用定义的方法中得到一个LambdaMetafactory#metafactory()。我无法弄清楚我做错了什么导致它。我查看了很多LambdaMetafactory#metafactory()在线使用的示例,但没有找到与我正在尝试做的完全匹配的任何示例。

这是运行附加代码的[整个]输出:

我要做的是创建一个具有单个字段的类,该字段可以直接分配一个 lambda,或者通过查找类名和方法名来分配。双重性的原因是抽象出指定被调用方法的方式(直接在代码中指定,或在配置文件中指定)。

附加代码定义了一个功能接口,该接口ListMaker具有一个从对象的字符串表示生成单元素列表的方法。它包含一个listify实现与接口方法签名匹配的函数的静态方法,并将用于示例的直接设置方法部分。

这是代码:

我已经能够理解我在网上找到的类似示例,但它们都是最终结果;我无法找到任何足以描述最终结果的内容(至少对我而言),帮助我找出我做错了什么。

0 投票
1 回答
290 浏览

java - Java 构造函数引用赋值与新创建的对象赋值

我在我们的项目中遇到了以下代码:

有区别吗

懒惰的?

0 投票
1 回答
81 浏览

collections - 确保按元素中的字段排序的元素列表

使用Guava可以通过这种方式确保升序:

对我来说很奇怪 Guava(尽管它与 Java lambdas 密切相关)并没有为这种情况提供简单的解决方案。当然,我可以编写一些帮助方法并将其包装起来,但也许有人已经在库中完成了。有最简单的方法吗?就像是: