दिलचस्प पोस्ट
`इनपुट` और` कच्चे_इनपुट` के बीच अंतर Console.log क्या है? रनटाइम पर WCF बदल समापन बिंदु पता वीबीए में टेक्स्टबॉक्स में एमएम / डीडी / वाई वाई वाई वाई की प्रारूपण Http अनुरोध के आधार पर वेब अनुप्रयोग में मोबाइल ब्राउज़र का पता लगाने का मानक तरीका जावा में toString विधि का उपयोग कैसे करें? मेलिंग से पहले उपयोगकर्ता इनपुट को PHP में कैसे स्वीकृत करना है? कैसे Magento मॉड्यूल में एक क्रॉन नौकरी सेटअप करने के लिए? मैं LINQ क्वेरी या इकाई में ROW_NUMBER कैसे जोड़ूं? दिनांक प्रारूप पार्स अपवाद – "ईईई एमएमएम डीडी एच एच: एमएम: एसएस जेड य्याय" रनटाइम अपवाद: आपकी सामग्री में एक ListView होना चाहिए जिसका आईडी विशेषता 'android.r.id.list' है एमवीसी एजेक्स जेसन पोस्ट नियंत्रक कार्रवाई विधि के लिए ट्यूपल्स में अस्थिर वस्तुओं क्यों हो सकते हैं? सक्रिय इंटरनेट कनेक्शन एंड्रॉइड के लिए चेक करें Tensor प्रवाह में कक्षा असंतुलित बाइनरी क्लासिफायरियर के लिए हानि समारोह

जावा: एक फ़ाइल में एकाधिक वर्ग घोषणाएं

जावा में, आप एक ही फ़ाइल में कई शीर्ष स्तर कक्षाओं को परिभाषित कर सकते हैं, जिससे कि उनमें से अधिकांश सार्वजनिक हैं ( जेएलएस §7.6 देखें)। उदाहरण के लिए नीचे देखें

  1. क्या इस तकनीक के लिए कोई सुस्पष्ट नाम है ( inner , nested , anonymous अनुरूप)?

  2. जेएलएस का कहना है कि सिस्टम प्रतिबंध को लागू कर सकता है कि ये माध्यमिक कक्षाओं referred to by code in other compilation units of the package नहीं referred to by code in other compilation units of the package जा सकता है, उदाहरण के लिए, उन्हें पैकेज-निजी के रूप में नहीं माना जा सकता है क्या यह वास्तव में कुछ है जो जावा कार्यान्वयन के बीच बदलता है?

जैसे, PublicClass.java:

 package com.example.multiple; public class PublicClass { PrivateImpl impl = new PrivateImpl(); } class PrivateImpl { int implementationData; } 

Solutions Collecting From Web of "जावा: एक फ़ाइल में एकाधिक वर्ग घोषणाएं"

इस तकनीक के लिए मेरा सुझाव दिया गया नाम (एकल स्रोत फ़ाइल में कई शीर्ष-स्तरीय वर्गों सहित) "गंदगी" होगी। गंभीरता से, मुझे नहीं लगता कि यह एक अच्छा विचार है – मैं इस परिस्थिति में नेस्टेड प्रकार का उपयोग करना चाहता हूं। फिर यह भविष्यवाणी करना आसान है कि कौन सा स्रोत फ़ाइल अंदर है। मुझे नहीं लगता है कि हालांकि इस दृष्टिकोण के लिए एक आधिकारिक शब्द है।

के रूप में यह वास्तव में कार्यान्वयन के बीच बदलता है – मुझे बहुत संदेह है, लेकिन अगर आप इसे पहले स्थान पर नहीं करना चाहते हैं, तो आपको कभी भी देखभाल की आवश्यकता नहीं होगी 🙂

जवाक इस पर सक्रिय रूप से निषिद्ध नहीं करता है, लेकिन इसकी एक सीमा होती है जिसका मतलब है कि आप किसी अन्य फ़ाइल से एक शीर्ष-स्तरीय वर्ग को संदर्भित नहीं करना चाहते हैं, जब तक कि इसमें फ़ाइल के नाम के समान नहीं है।

मान लीजिए आपके पास दो फ़ाइलें हैं, फू जावा और बार.जावा

Foo.java में शामिल हैं:

  • सार्वजनिक वर्ग फू

बार। जावा में शामिल हैं:

  • सार्वजनिक वर्ग बार
  • कक्षा बज

मान लें कि सभी कक्षाएं समान पैकेज में हैं (और फ़ाइलें उसी निर्देशिका में हैं)

क्या होगा अगर Foo.java Baz को संदर्भित करता है लेकिन बार नहीं है और हम Foo.java को संकलित करने का प्रयास करते हैं? संकलन इस तरह एक त्रुटि के साथ विफल रहता है:

 Foo.java:2: cannot find symbol symbol : class Baz location: class Foo private Baz baz; ^ 1 error 

यदि आप इसके बारे में सोचते हैं तो यह समझ में आता है अगर फू जावा। बाज़ को संदर्भित करता है, लेकिन कोई बज़। जावा (या बज़। क्लास) नहीं है, तो जावा कैसे पता कर सकता है कि किस स्रोत फ़ाइल में दिख रही है?

यदि आप इसके बजाय jooac को एक ही समय में फू जावा और बार.जावा को संकलित करने के लिए कहते हैं, या यहां तक ​​कि अगर आपने पहले बार.जावा संकलित किया है (बाजा को छोड़कर जहां जावक पा सकते हैं) तो यह त्रुटि दूर हो जाती है। इससे आपके निर्माण की प्रक्रिया बहुत ही अविश्वसनीय और परतदार लगती है, हालांकि

क्योंकि वास्तविक सीमा, जो अधिक की तरह है "किसी अन्य फ़ाइल से शीर्ष-स्तरीय वर्ग को संदर्भित न करें, जब तक कि उस फ़ाइल में समान नाम न हो, या आप उस श्रेणी का संदर्भ भी दे रहे हैं जो उसी फ़ाइल में है जिसे नाम दिया गया है फाइल के रूप में एक ही बात "का पालन करने के लिए कड़ी मेहनत कर रहे हैं, लोग आम तौर पर अधिक सीधा (हालांकि सख्त) प्रत्येक फ़ाइल में एक शीर्ष स्तरीय वर्ग डाल करने के सम्मेलन के साथ जाते हैं। यह भी बेहतर है यदि आप कभी भी अपने विचार को बदलते हैं कि कक्षा को सार्वजनिक होना चाहिए या नहीं।

कभी-कभी सचमुच एक अच्छा कारण है कि हर कोई एक विशेष तरीके से कुछ करता है।

मेरा मानना ​​है कि आप केवल PrivateImpl यह कहते हैं कि यह क्या है: एक non-public top-level class । आप non-public top-level interfaces भी घोषित कर सकते हैं।

उदाहरण के लिए, अन्यत्र SO पर: गैर-सार्वजनिक शीर्ष-स्तरीय कक्षा बनाम स्थैतिक नेस्टेड क्लास

संस्करणों के बीच व्यवहार में बदलाव के लिए, 1.2.2 में "पूरी तरह से काम" के बारे में यह चर्चा हुई। लेकिन सूरज के मंच में 1.4 में काम करना बंद कर दिया: जावा कंपाइलर – एक फ़ाइल में गैर सार्वजनिक शीर्ष स्तर कक्षाओं को घोषित करने में असमर्थ ।

1.क्या इस तकनीक के लिए एक सुव्यवस्थित नाम है (आंतरिक, नेस्टेड, अनाम के अनुरूप)?

बहु-श्रेणी एकल-फ़ाइल डेमो

2. जेएलएस कहते हैं कि सिस्टम प्रतिबंध को लागू कर सकता है कि ये माध्यमिक कक्षाओं को पैकेज के अन्य संकलन इकाइयों में कोड द्वारा नहीं भेजा जा सकता है, उदाहरण के लिए, उन्हें पैकेज-निजी के रूप में नहीं माना जा सकता है क्या यह वास्तव में कुछ है जो जावा कार्यान्वयन के बीच बदलता है?

मुझे उन सभी के बारे में पता नहीं है जिनके पास कोई प्रतिबंध नहीं है – सभी फाइल आधारित कंपाइलर आपको उन फाइलों में स्रोत कोड वर्गों को संदर्भित करने की अनुमति नहीं देंगे, जिन्हें क्लास नाम के समान नहीं रखा गया है। (यदि आप बहु-श्रेणी की फ़ाइल संकलित करते हैं, और क्लास पथ पर कक्षाएं डालते हैं, तो कोई भी कंपाइलर उन्हें मिल जाएगा)

आप इस तरह के रूप में कई वर्गों हो सकते हैं

 public class Fun { Fun() { System.out.println("Fun constructor"); } void fun() { System.out.println("Fun mathod"); } public static void main(String[] args) { Fun fu = new Fun(); fu.fun(); Fen fe = new Fen(); fe.fen(); Fin fi = new Fin(); fi.fin(); Fon fo = new Fon(); fo.fon(); Fan fa = new Fan(); fa.fan(); fa.run(); } } class Fen { Fen() { System.out.println("fen construuctor"); } void fen() { System.out.println("Fen method"); } } class Fin { void fin() { System.out.println("Fin method"); } } class Fon { void fon() { System.out.println("Fon method"); } } class Fan { void fan() { System.out.println("Fan method"); } public void run() { System.out.println("run"); } } 

प्रभावी जावा 2 संस्करण (मद 13) के अनुसार:

"यदि एक पैकेज-निजी शीर्ष-स्तरीय वर्ग (या इंटरफ़ेस) का उपयोग केवल एक वर्ग के द्वारा किया जाता है, तो शीर्ष-स्तरीय वर्ग को एकमात्र वर्ग का एक निजी नेस्टेड श्रेणी बनाने पर विचार करें (आइटम 22)। यह सब से इसकी पहुंच कम कर देता है अपने पैकेज में कक्षाओं का उपयोग करने वाले एक वर्ग के लिए। लेकिन पैकेज-निजी शीर्ष-स्तरीय वर्ग की तुलना में अनायास सार्वजनिक वर्ग की पहुंच कम करने के लिए यह बहुत महत्वपूर्ण है: … "

नेस्टेड क्लास स्थिर या गैर-स्थिर हो सकता है, इसके आधार पर सदस्य वर्ग को संलग्न आवृत्ति (मद 22) तक पहुंच की आवश्यकता है या नहीं।