为什么javac不抱怨每个文件有多个公共类?

时间:2011-06-21 15:19:57

标签: java

这是我的示例类,它使用Java 1.6.0_14版编译(并运行):

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;
    }
  }
}

我知道你应该在Java中每个文件只有一个公共类,但这更像是一个约定而不是一个规则?

4 个答案:

答案 0 :(得分:12)

每个文件不允许有多个顶级类。 InnerSample内部类。

这是单个文件中禁止内容的示例:

public class Sample {

}

public class Sample2 {

}

请参阅JLS §7.6

答案 1 :(得分:4)

您不能拥有多个顶级公共课。

嵌套/内部类/接口/枚举/ @注释不计算在内。

答案 2 :(得分:1)

在您的示例中,InnerSample是“inner”类。内部类必须在另一个类中(因此,在外部类的源文件中)。

答案 3 :(得分:0)

因为它是一个内在的公共类