【发布时间】:2017-06-14 11:26:58
【问题描述】:
我刚刚遇到了这个“错误”,但我不确定这是否是有意的: 代码:
public static Object someMethod(){
assert SwingUtilities.isEventDispatchThread();
return new Object();
}
public static void main(String[] args){
SwingUtilities.invokeLater(() -> someMethod().toString());//First Example
SwingUtilities.invokeLater(someMethod()::toString);//Second Example
}
在第一个示例中,someMethod 在 swing Thread 上执行,但在第二个示例中不是,尽管我认为应该如此。
这是一个错误还是有意为之?
【问题讨论】:
-
看起来方法引用需要适当的对象或类作为第一个参数,而不是某种获取它的方法,因此在主线程中调用方法会破坏断言。没有方法的断言结果将用于创建
methodResult::toString,它相当于()->methodResult.toString()。 -
错误在哪里?在第二次调用中,
someMethod()本身在main主体中进行评估(因此,在main线程中),然后将对结果对象的toString方法的引用传递给invokeLater。
标签: java multithreading lambda java-8 method-reference