问题标签 [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 投票
2 回答
10925 浏览

java - Java 8 对静态方法与实例方法的引用

说我有以下代码

在另一个班级...

问题是如何使用 A::is 类型表示法引用实例方法版本?非常感谢

0 投票
1 回答
1247 浏览

java - 在 Java 8 中,如何对不带参数并返回 void 的方法进行方法引用?

我有一堆带有这个签名的方法:

(也就是说,它们返回 void 并且不带参数)而且我希望能够通过执行以下操作来填充 List:

但是,我无法@FunctionalInterfacejava.util.function包中找到支持此签名的内置程序。我必须为此创建自己@FunctionalInterface的吗?

0 投票
7 回答
13968 浏览

java - java 8中的“特定类型的任意对象”是什么意思?

在 Java 8 中有“方法参考”功能。其中一种是“对特定类型的任意对象的实例方法的引用”

http://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html#type

有人可以解释在这种情况下“特定类型的任意对象”是什么意思吗?

0 投票
3 回答
3665 浏览

java - Java 8 中静态方法引用的限制

我正在尝试使用方法引用来捕获方法调用并且遇到了一些限制。这工作正常:

但是,如果我将 Foo.setBar 的签名更改为如下所示:

我收到一个错误:

Cannot make a static reference to the non-static method setBar(String) from the type MyTest.Foo

我不清楚限制是什么。理想情况下,我想使用方法引用来捕获标准设置器上的调用。有没有办法做到这一点?

0 投票
3 回答
13663 浏览

java - Java 8 中的方法引用缓存是个好主意吗?

考虑我有如下代码:

假设它hotFunction经常被调用。那么是否建议缓存this::func,可能是这样的:

就我对 java 方法引用的理解而言,当使用方法引用时,虚拟机会创建一个匿名类的对象。因此,缓存引用只会创建一次该对象,而第一种方法会在每个函数调用上创建它。这个对吗?

出现在代码中热点位置的方法引用是否应该被缓存,或者虚拟机是否能够对此进行优化并使缓存变得多余?是否有关于此的一般最佳实践,或者这种缓存是否有用,这种高度 VM 实现是否特定?

0 投票
2 回答
360 浏览

java - 简化现场访问。我应该使用反射还是有 Java 8 解决方案?

我有以下示例类:

我想稍微简化一下,因为会创建更多这些类。架构始终相同:

  • 一些public final static String权限(必须在注释中可访问)
  • 这些权限中的每一个都有一个相应的布尔字段
  • 方法isGranted返回相应的布尔字段的值

正如您在示例代码中看到的那样:我已经编写了很多代码来实现这一点,但我不知道如何简化事情。

我可以想象两件事:

  1. 在构造函数内部调用super(READ, UPDATE, DELETE);,让超类isGranted(...)通过反射处理方法。

  2. 只需super();在构造函数内部调用,该类将public static final String自行查找字段并动态创建字段和 getter/setter,因为我的代码中不需要它们 - 它们只需要在运行时存在。

或者 Java 8 中是否有任何很酷的新功能,所以我可以这样做:

所以我可以动态调用相应的getter方法,比如:

(甚至使用字段,而不是 getter 方法)

如果有一个简单而好的解决方案,那就太酷了:)

提前致谢!

0 投票
3 回答
965 浏览

java - Java 8:使用方法引用获取 Operator-Function-Object

我想知道在 Java 8 中是否有可能获取标准运算符(+、-、<、>、...)的方法引用。

我想得到它,就像Foo::+Foo 是我可以得到它的某个已定义的地方一样。由于 Java 不允许在方法名称中使用特殊字符,我认为这是不可能的,是吗?

如果上述方法不存在:是否有一些地方定义了标准运算符Foo::plus

我知道有可能将它定义为 lambda ( (x, y) -> x + y),但在我看来,在某些情况下它可能更具表现力,因为它可以像在 Haskell 中那样使用对运算符的方法引用。

0 投票
1 回答
98 浏览

java-8 - 获取带有方法引用的方法对象

java.lang.reflect.Method是否可以通过使用 Java 8 的新方法引用功能来获取实例?

这样我就可以进行编译时检查,并且重构也会更容易。此外,我不需要捕获异常(毕竟不应该抛出)。

0 投票
4 回答
30942 浏览

java - Comparator.reversed() 不使用 lambda 编译

我有一个包含一些用户对象的列表,我正在尝试对列表进行排序,但只能使用方法引用,使用 lambda 表达式编译器会给出错误:

错误:

0 投票
2 回答
90803 浏览

java - Java 8 传递方法作为参数

目前进入 Java 8 lambda 表达式和方法引用。

我想将一个没有参数且没有返回值的方法作为参数传递给另一个方法。这就是我的做法:

我知道有一组预定义的功能接口,java.util.functionFunction<T,R>我没有找到一个没有参数且不产生结果的接口。