2011-06-21 10 views
5

Oto moja klasa próbki, które kompiluje (i działa) z wersji 1.6.0_14 Java:Dlaczego javac nie narzeka na więcej niż jedną klasę publiczną na plik?

import java.util.List; 
import java.util.ArrayList; 

public class Sample { 
    List<InnerSample> iSamples; 

    public Sample() { 
    iSamples = new ArrayList<InnerSample>(); 
    iSamples.add(new InnerSample("foo")); 
    iSamples.add(new InnerSample("bar")); 
    } 

    public static void main(String[] args) { 
    System.out.println("Testing..."); 
    Sample s = new Sample(); 
    for (InnerSample i : s.iSamples) { 
     System.out.println(i.str); 
    } 
    } 

    public class InnerSample { 
    String str; 
    public InnerSample(String str) { 
     this.str = str; 
    } 
    } 
} 

wiem, że jesteś ma tylko jedną klasę publiczną każdego pliku w Javie, ale nie jest to bardziej konwencji niż reguły?

Odpowiedz

12

Nie możesz mieć więcej niż jednej klasy najwyższego poziomu na plik. InnerSample to wewnętrzna klasa .

To jest przykład tego, co jest zabronione w jednym pliku:

public class Sample { 

} 

public class Sample2 { 

} 

Zobacz JLS §7.6.

+0

Ah, to ma więcej sensu. Z jakiegoś powodu właśnie usłyszałem, że to tylko jeden publiczny plik. Dzięki! – Pat

4

Nie możesz mieć więcej niż jednej publicznej klasy na najwyższym poziomie.

Zagnieżdżone/wewnętrzne klasy/interfejsy/enums/@ adnotacje nie liczą się.

1

W twoim przykładzie InnerSample jest klasą "". Klasa wewnętrzna MUSI znajdować się wewnątrz innej klasy (a więc wewnątrz pliku źródłowego klasy zewnętrznej).

0

Ponieważ jest to wewnętrzna klasa publiczna

+0

To jest naprawdę komentarz, a nie odpowiedź na pytanie. Użyj "dodaj komentarz", aby wystawić opinię dla autora. –

+0

możesz powiedzieć, że jest to krótka odpowiedź, ale zdecydowanie nie jest to komentarz. Żaden komentarz nie może zaczynać się od słowa "ponieważ". – fmucar

Powiązane problemy