ラムダ式を使用すると、Javaは実際には匿名(非静的)クラスを作成します。非静的な内部クラスは、常にそれらの囲むオブジェクトへの参照を含みます。Javaラムダ式が囲むオブジェクトへの参照を持たない方法はありますか?
このラムダ式は、別のプロセスでラムダを呼び出す可能性のある別のライブラリから呼び出されたときに、呼び出されたオブジェクトが別のプロセスでクラスを見つけることができないため、クラスが見つかりません。
この例を考えてみます。
public class MyClass {
public void doSomething() {
remoteLambdaExecutor.executeLambda(value -> value.equals("test"));
}
}
ジャワ)は、特定の機能インタフェースを実装する匿名の内部クラスを作成し、executeLambda(にパラメータとして渡します。それから、remoteLambdaExecutorは、プロセスを横断してその匿名クラスを取得し、リモートで実行します。 リモートプロセスは、MyClassのについて何も知らないし、それが囲んでいるオブジェクト参照のためのMyClassを必要とするため
java.lang.ClassNotFoundException: MyClass
がスローされます。
私はいつもAPIが期待する機能的なインターフェイスの静的な実装を使うことができますが、それは目的を破りラムダ機能を利用しません。
ラムダ式を使って解決する方法はありますか?
更新:何らかの形で別のプロセスにエクスポートされない限り、静的なクラスを使用することはできません。
'異なるプロセスでラムダを呼び出す可能性があります.':交差点のように聞こえます – wero
多分Javaはこれに対して間違った言語です。スクリプト言語が必要なのかもしれません。 –