मुझे एक कन्स्ट्रक्टर मिला है जो 4 पैरामीटर लेता है: String, Object, Object, MyEnum
।जब मैं उपयोग ढूंढता हूं क्लिक करता हूं तो Intellij कन्स्ट्रक्टर का चयन कैसे करता है?
public MyClass(String name, Object val1, Object val2, MyEnum cat) {
// find in usage = 202
this.name = name;
this.val1 = val1;
this.val2 = val2;
this.cat = cat;
}
95% उपयोग मामलों में पिछले पैरामीटर null
है, इसलिए मैं एक और निर्माता जो केवल 3 पैरामीटर लेता है और एक अशक्त के रूप में पिछले एक सेट बनाने के लिए करना चाहते हैं।
कुछ विचार मेरे मन में आया था लेकिन अंत में मैं निम्नलिखित समाधान के लिए एक कोशिश दे दी है: 202 खोजने उपयोग अभी भी -: - public MyClass(String name, Object val1, Object val2, Integer cat)
बदलें पिछले पैरामीटर
MyEnum
सेInteger
को (संकलन त्रुटि कोई फर्क नहीं पड़ता)प्रकार वस्तु के अंतिम पैरामीटर के साथ नए निर्माता जोड़ें:
public MyClass(String name, Object val1, Object val2, Object cat)
और अब पहले निर्माता (Integer
के साथ) 196 प्रयोगों और दूसरी है एक 6.
यह वही है जो मैं चाहता था (मुझे शून्य के अंतिम तत्व के साथ बिल्कुल 6 आमंत्रण मिल गए हैं) लेकिन इस व्यवहार का कारण क्या है? क्या इंटेलिज कुछ चेक करता है और यदि इनपुट प्रकार MyEnum
है तो इसे Integer
प्रकार के रूप में पारित नहीं किया जा सकता है, लेकिन शून्य दोनों को पास किया जा सकता है, तो पहले कन्स्ट्रक्टर के मामले में 6 कम परिणाम क्यों हैं?
जब मैं String
करने के लिए Object
से बदल (अब मैं String
और Integer
के साथ 2 कंस्ट्रक्टर्स है) दोनों मुझे 0 देना जब मैं उपयोग लगता है चलाते हैं।
इस व्यवहार की व्याख्या के लिए धन्यवाद।
क्या आप जावा के [अधिभार के लिए नियम] (https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.9) के बारे में पूछ रहे हैं? या आप कुछ तरीकों का वर्णन करने की कोशिश कर रहे हैं कि आईडीईए में "उपयोग ढूंढें" जावा से वास्तव में मेल नहीं खा रहा है? –
मैं केवल यह समझना चाहता हूं कि आईडीईए ने पोस्ट किए गए परिदृश्य में उपयोग का उपयोग कैसे किया है। – ruhungry