हालांकि it is possible to serialize a lambda in Java 8, यह strongly discouraged है; यहां तक कि serializing inner classes is discouraged। कारण यह है कि लैम्ब्स किसी अन्य जेआरई पर ठीक से निराश नहीं हो सकता है। हालांकि, इसका मतलब यह नहीं है कि सुरक्षित रूप से लैम्ब्डा को क्रमबद्ध करने का एक तरीका है?लैम्बडा को सुरक्षित रूप से क्रमबद्ध करने के लिए कैसे?
उदाहरण के लिए, कहते हैं कि मैं कुछ इस तरह होना करने के लिए एक वर्ग को परिभाषित:
public class MyClass {
private String value;
private Predicate<String> validateValue;
public MyClass(String value, Predicate<String> validate) {
this.value = value;
this.validateValue = validate;
}
public void setValue(String value) {
if (!validateValue(value)) throw new IllegalArgumentException();
this.value = value;
}
public void setValidation(Predicate<String> validate) {
this.validateValue = validate;
}
}
अगर मैं इस तरह वर्ग का एक उदाहरण की घोषणा की, मैं इसे क्रमानुसार नहीं करना चाहिए:
MyClass obj = new MyClass("some value", (s) -> !s.isEmpty());
लेकिन
// Could even be a static nested class
public class IsNonEmpty implements Predicate<String>, Serializable {
@Override
public boolean test(String s) {
return !s.isEmpty();
}
}
: क्या हुआ अगर मैं इस तरह वर्ग का एक उदाहरण बना दिया 210
MyClass isThisSafeToSerialize = new MyClass("some string", new IsNonEmpty());
क्या यह अब क्रमबद्ध करने के लिए सुरक्षित होगा? मेरी वृत्ति कहती है कि हाँ, यह सुरक्षित होना चाहिए, क्योंकि java.util.function
में इंटरफेस का कोई कारण नहीं है कि किसी भी अन्य यादृच्छिक इंटरफेस से अलग तरीके से इलाज किया जाना चाहिए। लेकिन मैं अभी भी सावधान हूँ।
इंटरफेस सीरियलाइजेशन के लिए पूरी तरह से अप्रासंगिक हैं, इसलिए हां, 'भविष्यवाणी' को कार्यान्वित करना किसी भी अन्य इंटरफ़ेस को लागू करने के समान प्रभाव है, * कोई नहीं *। लेकिन आपकी धारणा है कि लैम्ब्स किसी अन्य जेआरई पर ठीक से निराश नहीं हो सकता है।एक [अच्छी तरह से परिभाषित निरंतर प्रतिनिधित्व] है (https://docs.oracle.com/javase/8/docs/api/?java/lang/invoke/SerializedLambda.html)। – Holger
@ होल्गर तो [ऑरैक डॉक्स] क्यों है (https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html#serialization) ऐसा लगता है कि वे नहीं करते हैं? – Justin
ठीक है, इसमें [serialization के साथ आंतरिक वर्ग संबंधित समस्याओं] का संदर्भ है (https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html#serialization)। संक्षेप में, यह संभावित रूप से संकलक निर्भरता बना रहा है, जेआरई विशिष्ट मुद्दों पर नहीं। अनुमोदित, पाठ थोड़ा भ्रामक है। और आस-पास के संदर्भ के कब्जे वाले मूल्यों को गलती से क्रमबद्ध करने का खतरा याद रखें, जिसमें 'यह' ... – Holger