ग्राहक वर्ग कंस्ट्रक्टर इंजेक्शन का उपयोग करता है (फ़ील्ड इंजेक्शन पर अनुशंसित), लेकिन इंस्टेंस फ़ील्ड लैम्ब्डा के अंदर प्रयोग करने योग्य नहीं है।
@Component
public class Customer {
private final Account account;
@Autowired
public Customer(final Account account) {
this.account = account;
}
// Works perfectly fine
Callable propCallable = new Callable<String>(){
@Override
public String call() throws Exception {
return account.accountId();
}
};
//Shows warning : Variable account might not have been initialized
Callable lambdaCallable = () -> {
return account.accountId();
};
}
मैं सिर्फ यह जानने के लिए उत्सुक हूं कि क्या अनाम वर्ग के बजाय लैम्ब्डा के अंदर आवृत्ति चर का उपयोग करने का कोई बेहतर तरीका है?
नोट: मैं खाते को अंतिम रूप में रखना पसंद करता हूं।
अग्रिम में धन्यवाद
2 जवाब
अनाम वर्ग और लैम्ब्डा के बीच कुछ अंतर हैं . इस मामले में मुख्य है:
संकलन - बेनामी एक वर्ग के लिए संकलित करता है, जबकि लैम्ब्डा एक इनवोकडायनामिक निर्देश है
अब संकलक त्रुटि के बारे में। जावा ऑर्डर ऑफ इनिशियलाइज़ेशन रूल्स द्वारा, आपका लैम्ब्डा इनिशियलाइज़ेशन 'खाता' से पहले होता है। कंस्ट्रक्टर में असाइनमेंट। निश्चित नहीं है, लेकिन संकलन अंतर के कारण अनाम वर्ग के साथ ऐसी कोई त्रुटि नहीं है।
तो, आप लैम्ब्डा को विधि से वापस कर सकते हैं, या 'lambdaCallable' इनिशियलाइज़ेशन को कंस्ट्रक्टर में स्थानांतरित कर सकते हैं।
public class DemoApplication {
public class Customer {
private final Account account;
public Customer(final Account account) {
this.account = account;
}
// Works perfectly fine
Callable propCallable = new Callable<String>(){
@Override
public String call() throws Exception {
return account.accountId();
}
};
Callable getCallable() {
return account::getId;
}
// Callable lambdaCallable = () -> {
// return account.accountId();
// };
}
}
lambdaCallable
परिभाषा को कंस्ट्रक्टर के अंदर ले जाएं:
private final Callable<Long> lambdaCallable;
@Autowired
public Customer(final Novel account) {
this.account = account;
lambdaCallable = account::getId;
}
संबंधित सवाल
नए सवाल
spring
स्प्रिंग फ्रेमवर्क जावा प्लेटफॉर्म पर एप्लिकेशन डेवलपमेंट के लिए एक ओपन सोर्स फ्रेमवर्क है। इसके मूल में घटक आधारित आर्किटेक्चर के लिए समृद्ध समर्थन है, और इसमें वर्तमान में बीस से अधिक उच्च एकीकृत मॉड्यूल हैं।