2012-09-20 19 views
11

में $ प्रभाव का क्या प्रभाव है मैंने हाल ही में Google लाइब्रेरी जीसन का स्रोत कोड देखा और वास्तव में कुछ अजीब (आईएमओ) देखा। Com.google.gson.internal पैकेज में 2 वर्ग हैं जो "$" से शुरू होते हैं।जावा क्लास नाम

उदाहरण

public final class $Gson$Types { ... } 

के लिए डॉलर साइन विकास के लिए एक प्रभाव पड़ता है या की तरह "कारण यह एक आंतरिक वर्ग है का उपयोग नहीं करें" कुछ यह सिर्फ बाहर डेवलपर्स के लिए कहने के लिए है करता है?

उत्तर

8

आप पहचानकर्ता में किसी भी मुद्रा चिह्न या निरंतरता चरित्र का उपयोग कर सकते हैं।

$ का उपयोग करके, यह सुझाव देता है कि यह जेनरेट किया गया है उदा। निर्माण द्वारा उत्पन्न, या केवल आंतरिक उपयोग के लिए।

Uses for special characters in Java code

Hidden code

यह केवल एक समस्या का कारण बनता है अगर आप उत्पन्न वर्गों जैसे के साथ संघर्ष किया है

class A { 
    class B { 
    } 
} 
class A$B { 
} 

रिपोर्ट

error: duplicate class: A.B 

संकलक उत्पन्न कक्षाएं एक $ जो इस रूप में किया कारण हो सकता है के साथ शुरू नहीं है।

विंडोज 7 पर, विशेष वर्ण है जो एक कक्षा में दिखाई दे सकता

public static void main(String... args) throws IOException { 
    for (char ch = 0; ch < Character.MAX_VALUE; ch++) { 
     if (Character.isJavaIdentifierStart(ch) && !Character.isLetter(ch)) 
      System.out.println("interface " + ch + " { }"); 
    } 
} 

interface $ { } 
interface _ { } 
interface ¢ { } 
interface £ { } 
interface ¤ { } 
interface ¥ { } 
interface € { } 

अन्य विशेष वर्ण जावा द्वारा अनुमति देता है, लेकिन फ़ाइल नाम के रूप में समर्थित नहीं हैं। यह ओएस और संभवतः भाषा पर निर्भर हो सकता है।

+0

मुझे नहीं लगता कि आप "किसी भी" मुद्रा चिह्न का उपयोग कर सकते हैं। जेएलएस से: "जावा अक्षरों" में अपरकेस और लोअरकेस एएससीआईआई लैटिन अक्षरों एजेड (\ u0041- \ u005a), और एज़ (\ u0061- \ u007a), और, ऐतिहासिक कारणों से, ASCII अंडरस्कोर (_, या \ u005f) और डॉलर का चिह्न ($, या \ u0024)। $ वर्ण का उपयोग केवल यांत्रिक रूप से जेनरेट किए गए स्रोत कोड में या शायद ही कभी, विरासत प्रणाली पर पूर्व-मौजूदा नामों तक पहुंचने के लिए किया जाना चाहिए। " मुझे संदेह है कि एक यूरो संकेत वैध होगा, उदाहरण के लिए। –

+0

@ जोन्सस्केट महत्वपूर्ण शब्द * शामिल * है। अधिकांश मुद्रा संकेत भी € (यूरो) संकेत सहित योग्यता प्राप्त करते हैं। – assylias

+1

यूरो की अनुमति है, लेकिन यह कुछ ऐसे हैं जो हैं। विंडोज 7 पर सभी का प्रयास किया;; –

1

कंपाइलर/रनटाइम के परिप्रेक्ष्य से, यह केवल एक वर्ण है जो नाम का हिस्सा बनता है, जैसे G या s। इसका कोई विशेष अर्थपूर्ण अर्थ नहीं है।

हालांकि, language spec संकेत है कि आप $ चरित्र खुद के पहचानकर्ता का उपयोग कर से बचना चाहिए:

एक पहचानकर्ता जावा पत्र और जावा अंक की एक असीमित-लंबाई अनुक्रम है, जिनमें से पहले एक होना चाहिए जावा पत्र

...

"जावा पत्र" अपरकेस और लोअरकेस ASCII लैटिन अक्षर शामिल A - Z (\u0041-\u005a), और az (\u0061-\u007a), और, ऐतिहासिक कारणों से, ASCII अंडरस्कोर (_, या \u005f) और डॉलर चिह्न ($, या \u0024)। $ चरित्र केवल यांत्रिक रूप से जेनरेट किए गए स्रोत कोड में या शायद ही कभी, विरासत प्रणाली पर पूर्व-मौजूदा नामों तक पहुंचने के लिए उपयोग किया जाना चाहिए।

-1

नहीं, यह बहुत गलत है, Google को ऐसा नहीं करना चाहिए था। $ संकेत विशेष रूप से नेस्टेड कक्षाओं में एक डिलीमीटर के रूप में आरक्षित है। जेडीके समेत कई कोड इस सम्मेलन पर निर्भर करते हैं (जो लगभग सभी लोगों द्वारा मनाया जाता है)।Google के शरारती नामकरण अभ्यास इन कोडों को तोड़ देगा।

+0

क्या आप एक ठोस उदाहरण दे सकते हैं? –

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