javac सक्रिय रूप से इसे प्रतिबंधित नहीं करता है, लेकिन इसमें एक सीमा है कि बहुत अधिक मतलब है कि आप कभी भी किसी अन्य फ़ाइल से एक शीर्ष-स्तरीय वर्ग को संदर्भित नहीं करना चाहते हैं जब तक कि इसका नाम उसी फ़ाइल के रूप में न हो।
मान लीजिए कि आपके पास दो फाइलें हैं, Foo.java और Bar.java।
Foo.java में शामिल हैं:
Bar.java में शामिल हैं:
- सार्वजनिक वर्ग बार
- कक्षा बाज
यह भी कहते हैं कि सभी कक्षाएं एक ही पैकेज में हैं (और फाइलें एक ही निर्देशिका में हैं)।
अगर Foo.java बाज को नहीं बल्कि बार को संदर्भित करता है और हम Foo.java को संकलित करने की कोशिश करते हैं तो क्या होगा? इस तरह एक त्रुटि के साथ संकलन विफल रहता है:
Foo.java:2: cannot find symbol
symbol : class Baz
location: class Foo
private Baz baz;
^
1 error
यह समझ में आता है अगर आप इसके बारे में सोचते हैं। यदि Foo.java Baz को संदर्भित करता है, लेकिन कोई Baz.java (या Baz.class) नहीं है, तो javac को कैसे पता चल सकता है कि किस स्रोत फ़ाइल को देखना है?
यदि आप इसके बजाय एक ही समय में Foo.java और Bar.java को संकलित करने के लिए javac को बताते हैं, या यहां तक कि अगर आपने पहले Bar.java को संकलित किया था (Baz.class को छोड़कर जहाँ javac इसे पा सकते हैं) तो यह त्रुटि दूर हो जाती है। यह आपकी निर्माण प्रक्रिया को बहुत अविश्वसनीय और परतदार बनाता है, हालाँकि।
क्योंकि वास्तविक सीमा, जो अधिक पसंद है "किसी अन्य फ़ाइल से एक शीर्ष-स्तरीय वर्ग का उल्लेख न करें जब तक कि उसका नाम उसी फ़ाइल के रूप में न हो या आप उस वर्ग का भी उल्लेख कर रहे हैं जो उसी फ़ाइल में है जिसका नाम है फ़ाइल के रूप में एक ही बात "पालन करने के लिए कठिन है, लोग आमतौर पर प्रत्येक फ़ाइल में सिर्फ एक शीर्ष स्तर के वर्ग को रखने के लिए बहुत अधिक सरल (हालांकि सख्त) सम्मेलन के साथ जाते हैं। यह भी बेहतर है कि क्या आप कभी इस बारे में अपना विचार बदलते हैं कि कोई वर्ग सार्वजनिक होना चाहिए या नहीं।
कभी-कभी वास्तव में एक अच्छा कारण है कि हर कोई किसी विशेष तरीके से कुछ क्यों करता है।