java - Invalid constructor reference when using local class? -
निम्न कोड को देखते हुए:
पैकेज com.gmail.oksandum.test; आयात करें java.util.ArrayList; आयात java.util.List; सार्वजनिक वर्ग की परीक्षा {सार्वजनिक स्थिर शून्य मुख्य (स्ट्रिंग [] आर्ग्स) {} सार्वजनिक शून्य foo () लोकलफू {स्थानीय फ़ू (स्ट्रिंग इन) {// कुछ तर्क}} सूची & lt; स्ट्रिंग & gt; एलएस = नए अर्रेलिस्ट & lt; & gt; (); । Ls.stream () मानचित्र (LocalFoo :: नई); // लाइन 21}} मेरी आईडीई मुझे कोई त्रुटि नहीं देता है यही है, जब तक मैं इस परियोजना को बनाने और इसे चलाने की कोशिश। जब मैं ऐसा करता हूं तो मुझे एक कंपाइलर त्रुटि देता है जो इस तरह दिखता है:
त्रुटि: (21, 24) java: असंगत प्रकार: प्रकार-चर (आर) आर (तर्क बेमेल) अनुमान नहीं लगा सकते हैं; अवैध कन्स्ट्रक्टर संदर्भ कन्स्ट्रक्टर लोकल फ़ू (java.lang.String) का उपयोग नहीं कर सकता है। कॉम्पेम्बर.ओकेसेंडम टाइप की एक संक्षिप्त उदाहरण। टेस्ट क्षेत्र में नहीं है) अब, मुझे लगा, दिया गया त्रुटि संदेश, यह ऐसा नहीं होगा अगर foo () स्थिर थे और बहुत सही है, यह केवल तब होता है जब foo () एक उदाहरण विधि है और यह केवल तभी होता है जब LocalFoo एक स्थानीय क्लास होता है उदाहरण विधि में, और केवल अगर कन्स्ट्रक्टर संदर्भ का प्रयोग किया जाता है (यानी कभी भी एक नियमित विधि संदर्भ नहीं)।
क्या अधिक है, अगर मैं लाइन 21 को
ls.stream ()। नक्शा (str - & gt; नया लोकलफू (str)); संकलक अचानक कोई त्रुटि नहीं देता।
तो रीकैप करने के लिए यदि मैं एक उदाहरण के तरीके के तहत घोषित स्थानीय श्रेणी पर एक कंस्ट्रक्टर संदर्भ का उपयोग करने की कोशिश करता हूं, तो कंपाइलर कंसट्रक्टर तक पहुंचने में सक्षम नहीं होने के बारे में शिकायत करता है, जिसके बारे में मैं उलझन में हूं।
अगर कोई पर कुछ प्रकाश डाल सकता है ऐसा क्यों होता है कि इसकी सराहना की जाएगी धन्यवाद।
ऐसा लगता है कि LocalFoo किसी भी तरह से गैर-स्थिर की तरह व्यवहार किया जाता है कक्षा। यही कारण है कि यह दावा करता है कि टेस्ट का कोई उदाहरण क्षेत्र में नहीं है। ट्यूटोरियल से:
स्थानीय कक्षाएं अस्थायी हैं क्योंकि उनके पास संलग्न ब्लॉक । नतीजतन, वे अधिकांश प्रकार की स्थिर घोषणाएं नहीं कर सकते हैं।
विधि foo () या वर्ग LocalFoo इस काम के लिए स्थिर होना चाहिए लेकिन एक विधि के भीतर एक वर्ग को स्थिर के रूप में घोषित नहीं किया जा सकता है तो आपको इसे विधि से बाहर ले जाना होगा यदि foo () को असंतुलित होना चाहिए (एक आंतरिक, स्थैतिक वर्ग के रूप में)। एक और विकल्प यह है कि इसका उपयोग करें:
ls.stream ()। मैप (एस -> नया लोकलफू (एस)); बस test.this.LocalFoo कहते हैं, लेकिन वह काम नहीं करता है। और अगर ऐसा हुआ तो कंपाइलर को भी LocalFoo :: new को स्वीकार करना चाहिए। अब एक बग रिपोर्ट है:
(देखें)
Comments
Post a Comment