+1 امتیاز
قبل در برنامه نویسی توسط (1.1هزار امتیاز)

در جاوا 8 در مواردی که یک lambda expression چیزی بر نمی گرداند خطای Cannot convert void to java.lang.Void بر می خوریم:

JPA.withTransaction("test1", false
                , () -> JPA.em().persist(new Task("test 1 task")); );

دلیل بروز این خطا چیست و چگونه رفع می شود؟

1 پاسخ

+1 امتیاز
قبل توسط (1.1هزار امتیاز)

یک تابع که با استفاده از lambda expression در جاوا 8 تعریف می شود حتما باید مقدار بازگشتی داشته باشد حتی اگر مقدار آن بازگشتی آن Void (با V بزرگ) در نظر گرفته شده باشد حداقل باید null برگرداند. در مثال مطرح شده متد persist کلاس EntityManager مقداری بر نمی گرداند و مقدار بازگشتی آن void (با v کوچک) است. در جاوا void (با v کوچک) یعنی هیچی و حتی null هم نیست و معنای واقعی هیچی است. در حالی که نوع بازگشتی متد withTransaction با استفاده از مفاهیم generics method برابر Void (با V بزرگ) است. برای حل اینگونه موارد یک return null در انتهای lambda expression مشکل را برطرف می کند:

JPA.withTransaction("test1", false
                , () ->{JPA.em().persist(new Task("test 1 task")); return null;});

سوالات مشابه

+1 امتیاز
1 پاسخ 1.2هزار بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
+2 امتیاز
1 پاسخ 955 بازدید
+1 امتیاز
1 پاسخ 451 بازدید
+2 امتیاز
1 پاسخ 1.8هزار بازدید
سوال شده 8 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
0 امتیاز
2 پاسخ 1.1هزار بازدید
+2 امتیاز
1 پاسخ 556 بازدید
...