2011-06-21 28 views
5

Đây là lớp mẫu của tôi, mà biên dịch (và chạy) với phiên bản 1.6.0_14 của Java:Tại sao javac không phàn nàn nhiều hơn một lớp công khai cho mỗi tệp?

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

Tôi biết rằng bạn đang nghĩ đến chỉ có một lớp công chúng cho mỗi tập tin trong Java, nhưng là hơn này của một quy ước hơn là một quy tắc?

Trả lời

12

Bạn không được phép có nhiều hơn một lớp học cấp cao nhất mỗi tệp. InnerSample là lớp bên trong .

Đây là một ví dụ về những gì bị cấm trong một tập tin duy nhất:

public class Sample { 

} 

public class Sample2 { 

} 

Xem JLS §7.6.

+0

Ah, điều đó có ý nghĩa hơn. Vì lý do nào đó, tôi vừa mới nghe nói rằng đó chỉ là một công chúng cho mỗi tập tin. Cảm ơn! – Pat

4

Bạn không thể có nhiều lớp học công khai cấp cao nhất.

Lồng nhau/lớp bên trong/giao diện/enums/@ chú thích không được tính.

1

Trong ví dụ của bạn, InnerSample là lớp "inner". Một lớp bên trong PHẢI nằm trong một lớp khác (và do đó, bên trong tệp nguồn của lớp bên ngoài).

0

Vì đây là lớp công khai bên trong

+0

Đây thực sự là một bình luận, không phải là câu trả lời cho câu hỏi. Vui lòng sử dụng "thêm nhận xét" để để lại phản hồi cho tác giả. –

+0

bạn có thể nói đó là câu trả lời ngắn nhưng dứt khoát không phải là nhận xét. Không có bình luận nào có thể bắt đầu bằng từ "vì". – fmucar

Các vấn đề liên quan