2012-03-31 17 views
11

जावा में एक इंस्टेंस वैरिएबल हो सकता है और किसी विधि का कोई नाम अस्थिरता या संघर्ष के बिना हो सकता है?जावा इंस्टेंस वैरिएबल और विधि का नाम समान नाम

मैं यह सुनिश्चित करना चाहता हूं कि मैं इसे संकलित करने से दूर हो जाऊं, जिससे यह सड़क पर कोई त्रुटि न हो।

+11

आपने इसे अपने आप क्यों नहीं किया? :) –

+1

सी # में इसकी अनुमति नहीं है। –

उत्तर

14

हां यह ठीक है, मुख्य रूप से क्योंकि, वाक्य रचनात्मक रूप से, उनका अलग-अलग उपयोग किया जाता है।

+1

हालांकि आप सही हैं - यह संभव है, मुझे नहीं लगता कि "सिंथेटिक अलग-अलग" कारण सही है। मेरा सी ++ जंगली है, लेकिन मुझे लगता है कि सी ++ में, वे अलग-अलग इस्तेमाल भी होते हैं लेकिन इससे समस्याएं पैदा होती हैं। उदाहरण के लिए: http://ideone.com/SQWav – amit

+0

@amit - अच्छा बिंदु, मुझे इस मुद्दे का अध्ययन करने दें और मैं जवाब में संशोधन करूंगा। बहुत बहुत धन्यवाद – Coffee

+2

@amit लेकिन सी ++! = जावा, है ना? – arshajii

3

केवल संघर्ष मैं के बारे में सोच सकता है

int sameName = 5; 

public int sameName() { 
    //method body 
    return 100; 
} 

है आप लिखते हैं "this.sameName" जब आप "this.sameName()" लिखने के लिए अपेक्षा की जाती है और प्रोग्राम में कुछ जगह पर उपाध्यक्ष तब कोड का उन्मूलन अभी शुरू हो गया है।

+2

लेकिन यह सिर्फ एक बग होगा। यह अभी भी कानूनी है। : डी – zEro

+0

@vikingsteve: पी –

+4

+1 कम बोल्ड के लिए +1: ओ – vikingsteve

5

यह पूरी तरह ठीक है क्योंकि विधियों और चर को अलग-अलग कहा जाता है।

कोड:

String name = "myVariable"; 

public String name() { 
    return "myMethod"; 
} 

System.out.println(name()); // Brackets for method call 
System.out.println(name); // No brackets for variable call 

आउटपुट:

MyMethod

myVariable

0

आप कर सकते हैं, लेकिन यह एक विरोधी पा है ttern, बचा जाना चाहिए, और इतने तरह एनालिटिक्स द्वारा पकड़ा जा सकता है:

http://pmd.sourceforge.net/pmd-4.3.0/rules/naming.html

2

मैं वास्तव में एक मुद्दा है, जो बहुत विशिष्ट है में भाग लिया है। यह सिर्फ जावा 8 (नैशर्न का उपयोग करके) में प्रकट होता है, लेकिन जावा 6 में नहीं (राइनो का उपयोग करके)। यदि जावास्क्रिप्ट के माध्यम से जावा ऑब्जेक्ट के इंस्टेंस वैरिएबल तक पहुंचने का प्रयास किया जाता है, तो [] ऑपरेटर इसके बजाय विधि उदाहरण देता है।

के मैं निम्नलिखित जावा घोषणा चल रहा हूँ लगता है:

class MyClass { 
    private boolean isSet=false; 
    public boolean isSet() { return isSet; } 
} 

अगर मैं जावास्क्रिप्ट में ऐसे वर्ग की एक वस्तु में हेरफेर, और फिर [] ऑपरेटर के साथ यह तक पहुँचने का प्रयास, मैं विधि संदर्भ मिलता है।

var obj = new MyClass(); 
var myfields = (myclass.getClass()).getDeclaredFields(); 
var myfieldname = myfields[0].name; 

// The following prints the method declaration, not the boolean value: 
// [jdk.internal.dynalink.beans.SimpleDynamicMethod boolean MyClass.isSet()] 
println(obj[myfieldname]); 

अद्यतन: जाहिर है Nashorn's method overloading resolution mechanism ("परोक्ष" या गैर जानबूझकर) ही नाम के साथ उदाहरण के क्षेत्रों पर बहस के बिना तरीकों को उच्च महत्व देता है।

संबंधित मुद्दे