问题标签 [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.
java - Java 传递方法作为参数
我正在寻找一种通过引用传递方法的方法。我知道 Java 不会将方法作为参数传递,但是,我想找一个替代方案。
有人告诉我,接口是作为参数传递方法的替代方法,但我不明白接口如何通过引用充当方法。如果我理解正确,接口只是一组未定义的抽象方法。我不想发送一个每次都需要定义的接口,因为几个不同的方法可以使用相同的参数调用相同的方法。
我想要完成的是与此类似的事情:
调用如:
java - 方法引用的 Lambda 转换
如果我有:
以下转换为完整的 lambda 表达式是否正确?
然后,还有一个问题:如果我写:dir.listFiles(B::test2);
我从编译器那里得到:
但为什么该错误不会引发:dir.listFiles(File::isFile);
java - 方法引用的类别是什么?
我有以下代码:
Intellij Idea 建议我应该将 lambda 表达式替换为方法引用。我想这样做,只是我不确定流列表的新通用类型应该是什么。我试图评估表达式 personList::stream 但我得到“没有这样的实例字段:'stream'”。如果我尝试 List::stream 或 ArrayList::stream (人员列表的具体类型),我会得到:“没有这样的静态字段:'stream'”。有没有办法将方法引用添加到列表中?如果是这样,列表的通用类型应该是什么?
谢谢
正如 assylias 指出的那样,IDEA 只是在抱怨并且代码运行没有问题,我仍然在 IDEA 13 中遇到相同代码的问题,因为 stream.add 期望返回 Stream 和 List::stream 的函数返回 Stream。为了解决它,我最终使用了以下代码:
java - 方法引用的通用功能接口的方法签名
假设你有一个方法
Consumer
通过使用新的方法引用,您可以从中创建一个
如果您现在通过反射查看创建的 Consumer 的类,您会看到它唯一声明的方法是
如果通过创建匿名内部类以旧方式创建消费者
会有桥接法void accept(Object)
以及void accept(String)
.
现在假设我们必须传递这个消费者,从而失去它的泛型类型。如果你有一个实现Consumer<String>
而不是 Lambda 表达式,你可以通过使用 relfection 来访问它的方法来取回它。由于通过方法引用创建的消费者只有通用方法,所以这不起作用。有没有办法获取方法引用创建的消费者的参数类型?
java - Java 8 中的实例方法引用类型有什么区别?
所以 Java 8 引入了方法引用,文档描述了这四种类型。
我的问题是这两种实例类型有什么区别?
- 引用特定对象的实例方法。
- 引用特定类型的任意对象的实例方法。
两者都引用参考,但有什么显着不同?是用来解决它们的类型推断不同吗?(在他们的示例中)一个是闭包而另一个是 lambda 是否重要?它与方法的参数数量有关吗?
java - 为什么 Comparator.comparing 不适用于 String::toLowerCase 方法参考?
我正在尝试按相反的顺序(忽略大小写)对字符串数组进行排序,而不修改它,只打印它。所以我正在使用Java8流。但我无法做到。
这是我的尝试:
这里的问题是String::toLowerCase
在静态方法中不被接受Comparator.comparing
。
同时,我设法对数组进行了排序,但对其进行了修改:
那么,最简单的解决方法是什么?
java - 具有不同参数的重载方法的方法引用无效
尝试编译表达式Comparator.comparing(String::toLowerCase)
时,Java 编译器返回错误。有关详细信息,请参阅以下问题:
为什么 Comparator.comparing 不适用于 String::toLowerCase 方法参考?
我试图尽可能地减少这个问题。特别是,我已经删除了几乎所有对其他类的依赖。main方法包含两个方法调用。第一条语句编译没有错误,而第二条语句产生错误。
这很奇怪,因为第二个baz方法不应该在这种情况下适用,因为参数数量不匹配。我看过 JLS8 (15.13)。然而,这并没有帮助,因为方法引用的规则非常复杂。
Q:为什么第二种情况会出现编译错误?根据 JLS,真的应该存在编译错误吗?根据对另一个问题的一些评论,Netbeans 中没有编译错误。
作为参考,我使用的是 JDK8 版本 1.8.0-b132。如果在命令行上编译程序,编译器会显示以下错误消息:
java - 是否有可用于引发异常的方法参考?
假设我有以下代码:
有没有办法让它更简洁,现在可用,或者可能在未来的 Java 版本中可用?我期望以下内容:
有关更多信息,我打算将此代码用于可能发生异常情况但并不总是需要RuntimeException
抛出异常的方法。我想给呼叫者在异常情况发生时做任何他们想做的事情的自由。
在我看来,这在 Java 8 中是不可能的,是否已经讨论过这个问题,是否有任何理由无法做到这一点?
java - 无法弄清楚行为:使用 lambda 的方法参考
考虑下面的代码,
run()
通过方法返回的Runnable
实例testStatic
方法应该被调用。控制台上的输出应该是“运行”。
但是这段代码没有调用run()
实例方法,r
控制台中也没有打印任何内容。
有人可以解释一下原因。
如果我没有正确使用方法参考“::”并发表评论。
java - 如何使用方法引用调用参数化方法
考虑下面的代码,
如果方法的参数将被消除,我们可以调用该testStatic
方法作为TestInter
接口实现的主体,如this so answer中所述。abc()
testStaic()
但是在这种情况下,我们如何为参数化方法编写方法引用testStatic
?