Khi biểu thức lambda được sử dụng Java thực sự tạo ra một lớp ẩn danh (không tĩnh). Các lớp bên trong không tĩnh luôn chứa các tham chiếu các đối tượng kèm theo của chúng. Khi biểu thức lambda này được gọi từ một thư viện khác có thể gọi lambda trong một tiến trình khác mà gọi sự cố với lớp không tìm thấy ngoại lệ vì nó không thể tìm thấy lớp của đối tượng kèm theo trong một tiến trình khác.Có cách nào để biểu thức Java lambda không có tham chiếu đến đối tượng kèm theo không?
Hãy xem xét ví dụ sau:
public class MyClass {
public void doSomething() {
remoteLambdaExecutor.executeLambda(value -> value.equals("test"));
}
}
Java sẽ tạo ra một lớp bên trong vô danh mà thực hiện giao diện chức năng nhất định và vượt qua nó như một tham số để executeLambda(). Sau đó remoteLambdaExecutor sẽ lấy lớp ẩn danh đó trong quá trình chạy từ xa. Quá trình từ xa không biết gì về MyClass và sẽ ném
java.lang.ClassNotFoundException: MyClass
Vì nó cần MyClass cho tham chiếu kèm theo đó.
Tôi luôn có thể sử dụng triển khai tĩnh giao diện chức năng được mong đợi bởi API, nhưng điều đó đánh bại mục đích và không sử dụng chức năng lambda.
Có cách nào để giải quyết nó bằng cách sử dụng biểu thức lambda không?
CẬP NHẬT: Tôi không thể sử dụng lớp tĩnh trừ khi bằng cách nào đó được xuất sang quy trình khác.
'có thể gọi lambda trong một tiến trình khác': âm thanh giống như chihuahua – wero
Có lẽ Java là ngôn ngữ sai cho việc này. Có lẽ bạn cần một ngôn ngữ kịch bản. –