は、私はこの「バグ」に遭遇するが、私はこれが意図されている場合はわからない: コード:最初の例someMethod
でinvokeLaterがメインスレッドで実行されるのはなぜですか?
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
}
スイングスレッド上で実行されているが、2番目の例では、それ私の意見ではありますが、そうではありません。
これはバグですか?そうですか? 「OK、スイングは、私はinvokeLater
にあなたを望むものsomeMethod().toString()
です」:
メソッドリファレンスは、最初の引数として適切なオブジェクトまたはクラスを必要とするように見えますが、メソッドを取得するための方法ではないため、主スレッドでアサーションを中断するメソッドが呼び出されます。 '' methodResult.toString() ''と同等の 'methodResult :: toString'を作成するために、メソッドのアサーション結果を使用しないでください。 – Pshemo
バグはどこですか? 2番目の呼び出しで 'someMethod()'自体が 'main'本体で評価され(' main'スレッドで)、結果オブジェクトの 'toString'メソッドへの参照が' invokeLater '。 – RealSkeptic
も参照してください。[System.out :: println'の同等のラムダ式は何ですか?](https://stackoverflow.com/a/28025717/2711488)... – Holger