我刚刚遇到了这个“错误”,但我不确定这是否是有意的: 代码:
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 线程上执行的,但在第二个示例中不是,尽管我认为应该如此。
这是一个错误还是有意为之?
最佳答案
对我来说,这似乎是对你的误解
第一行就像是在说:“好的,Swing,我希望你 invokeLater
是 someMethod().toString()
”。所以 Swing 执行它
第二行就像在说:“好吧,Swing,我要你invokeLater
是方法返回的对象的方法
”。 我现在正在执行的 toString()
>someMethod()someMethod()
方法
所以结果对我来说完全合乎逻辑
请记住,在评估函数之前(在本例中为 invokeLater
)Java 需要评估所有参数。所以在第一种情况下,Java 评估一个 lambda 函数(不需要执行它),在第二种情况下,它遇到一个方法调用所以它需要执行它
关于java - 为什么invokeLater在主线程中执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44543465/