2012-03-10 30 views
5

Đối với mã nguồn này ...Tên xung đột giữa gói và lớp học. Lỗi trong Eclipse hoặc javac?

enter image description here

... Eclipse thông báo lỗi sau:

Only a type can be imported. pkg.a resolves to a package

... trong khi Suns javac biên dịch nó tốt.

tình huống tương tự nếu tôi cố gắng để đủ điều kiện đầy đủ các lớp pkg.a như thế này:

enter image description here

báo cáo Eclipse ...

pkg.a cannot be resolved to a type

... trong khi Suns javac biên dịch nó tốt.


Có vẻ như Eclipse ủng hộ việc diễn giải mã nhận dạng dưới dạng gói trên tên lớp, còn javac thì ngược lại. Vì vậy, là nó là một lỗi trong Eclipse hoặc trong javac?

(A tham chiếu đến các đặc điểm kỹ thuật ngôn ngữ rõ ràng là một lợi thế.)

Trả lời

1

Đó là một quy ước phong cách để cung cấp cho các lớp một tên bắt đầu với một chữ cái viết hoa và gói với một lá thư chữ thường; điều đó sẽ giải quyết vấn đề của bạn.

+0

Bạn đã đọc câu hỏi chưa? (gợi ý, tìm kiếm văn bản in đậm :) – aioobe

+0

Tôi đã đọc câu hỏi; Tôi coi vấn đề của bạn là một trong những điều chỉ làm cho cuộc sống khó khăn hơn nếu bạn đứng yên trên chúng kể từ khi đi theo một quy ước về kiểu dáng để tránh nó. – Tom

3

Nó chắc chắn là một lỗi Eclipse:

6.4.2. Obscuring

A simple name may occur in contexts where it may potentially be interpreted as the name of a variable, a type, or a package. In these situations, the rules of §6.5 specify that a variable will be chosen in preference to a type, and that a type will be chosen in preference to a package. Thus, it is may sometimes be impossible to refer to a visible type or package declaration via its simple name. We say that such a declaration is obscured.

Hàm ý rõ ràng là nó là hợp pháp cho một lớp và một gói phần mềm có cùng tên. Nếu không, JLS sẽ nói rằng một lớp che khuất một gói là bất hợp pháp ... không phải là lớp được sử dụng trong sở thích.


Đã nói rằng, lý do duy nhất bạn gặp phải trong trường hợp này là bạn đã chọn bỏ qua các quy ước của Java về đặt tên. Đừng mong đợi nhiều cảm thông ...

+0

Bạn có biết nếu lỗi này đã được báo cáo? Trong trường hợp của tôi, tôi phụ thuộc vào một thư viện (JAR) có chứa cả một lớp (com.foo.Bar) và một số tài nguyên trong một thư mục xung đột với tên lớp (com/foo/Bar/boo.xml) Ở đây tôi đừng nghĩ rằng có bất kỳ quy ước đặt tên nào bị vi phạm ... Vẫn Eclipse không thể biên dịch được điều đó. –

+0

Đã được báo cáo nhưng đã đóng: https://bugs.eclipse.org/bugs/show_bug.cgi?id=117182 –

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