當使用lambda表達式時,Java實際上會創建一個匿名(非靜態)類。非靜態內部類總是包含它們的封閉對象的引用。Java lambda表達式有沒有方法可以引用封閉對象?
當這個lambda表達式是從可以在不同的過程調用帶班未發現異常崩潰,因爲它不能找到包圍對象的類另一個進程調用拉姆達另一個庫調用。
考慮這個例子:
public class MyClass {
public void doSomething() {
remoteLambdaExecutor.executeLambda(value -> value.equals("test"));
}
}
Java將創建用於實現某些功能接口匿名內部類,並將其傳遞作爲參數executeLambda()。然後,remoteLambdaExecutor將跨進程的這個匿名類遠程運行。 遠程過程一無所知MyClass的和將拋出
java.lang.ClassNotFoundException: MyClass
,因爲它需要MyClass的該封閉的對象引用。
我總是可以使用一個靜態實現由API所期望的功能接口,但失敗的目的,並且不使用拉姆達功能。
有沒有辦法使用lambda表達式來解決它?
更新:我不能使用任何除非它以某種方式出口到其他進程靜態類。
'可以在不同的process'調用拉姆達:聽起來像一個視交叉 – wero
也許Java是錯誤的語言這一點。也許你需要一種腳本語言。 –