javac ไม่ได้ห้ามอย่างแข็งขัน แต่มีข้อ จำกัด ที่ค่อนข้างมากหมายความว่าคุณไม่ต้องการอ้างถึงคลาสระดับบนจากไฟล์อื่นเว้นแต่จะมีชื่อเดียวกับไฟล์ที่อยู่ในนั้น
สมมติว่าคุณมีสองไฟล์คือ Foo.java และ Bar.java
Foo.java ประกอบด้วย:
Bar.java ประกอบด้วย:
สมมติว่าคลาสทั้งหมดอยู่ในแพ็คเกจเดียวกัน (และไฟล์อยู่ในไดเรกทอรีเดียวกัน)
จะเกิดอะไรขึ้นถ้า Foo.java อ้างถึง Baz แต่ไม่ใช่ Bar และเราพยายามรวบรวม 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 จะรู้ได้อย่างไรว่าไฟล์ต้นฉบับอะไรให้ค้นหาบ้าง
หากคุณบอกให้ javac รวบรวม Foo.java และ Bar.java ในเวลาเดียวกันหรือแม้ว่าคุณจะรวบรวม Bar.java ไว้ก่อนหน้านี้ (ทิ้ง Baz.class ที่ javac สามารถหาได้) ข้อผิดพลาดนี้จะหายไป สิ่งนี้ทำให้กระบวนการสร้างของคุณรู้สึกไม่น่าเชื่อถือและไม่สม่ำเสมอ
เนื่องจากข้อ จำกัด ที่แท้จริงซึ่งคล้ายกับ "ไม่อ้างถึงคลาสระดับบนสุดจากไฟล์อื่นเว้นแต่จะมีชื่อเดียวกับไฟล์ที่อยู่ในไฟล์หรือคุณอ้างถึงคลาสที่อยู่ในไฟล์เดียวกันกับชื่อนั้นด้วย สิ่งเดียวกันกับไฟล์ "เป็นเรื่องยากที่จะติดตามคนมักจะไปกับการประชุมที่ตรงไปตรงมามากขึ้น (แม้ว่าเข้มงวด) เพียงแค่ใส่ระดับบนสุดหนึ่งในแต่ละไฟล์ สิ่งนี้จะดีกว่าถ้าคุณเปลี่ยนใจว่าคลาสควรเป็นแบบสาธารณะหรือไม่
บางครั้งก็มีเหตุผลที่ดีว่าทำไมทุกคนทำบางสิ่งในลักษณะที่เฉพาะเจาะจง