2011-10-21 7 views
48

Việc sử dụng gói mặc định của Java có phải là thực tiễn không tốt?Việc sử dụng gói mặc định của Java có phải là thực tiễn không tốt?

+0

Tôi có những ký ức mơ hồ về các vấn đề phát sinh từ việc sử dụng gói mặc định khi cố gắng tham chiếu đến các lớp trong gói đó từ gói khác, 'thực' '. – Oliver

+4

Có, trừ khi bạn đang viết mã ném đi. – aroth

+5

Phụ thuộc vào những gì bạn đang làm. Đối với bài tập về nhà một lớp Java thì tốt. Bất cứ điều gì khác - chỉ cần đặt nó trong một gói có tên và bạn được an toàn. –

Trả lời

54

Vâng, đúng vậy. Lý tưởng nhất, tên gói phải là duy nhất toàn cầu, để tránh xung đột đặt tên. Sử dụng gói mặc định sẽ phá vỡ quy ước này. Cũng không thể nhập một lớp từ gói mặc định.

Tại sao các gói chưa đặt tên tồn tại, nếu đó là một ý tưởng tồi? Từ the JLS §7.4.2:

Unnamed packages are provided by the Java platform principally for convenience when developing small or temporary applications or when just beginning development.

+1

... Cho đến khi người khác có cùng một suy nghĩ như bạn. Vấn đề với việc chỉ sử dụng một gói có tên là gì? –

+0

@irreputable Tôi thích logic của bạn. – Michael

+3

... vâng, nhưng sau đó họ lo lắng về những người như tôi nên tất cả họ quyết định không sử dụng nó. – irreputable

1

Vâng, đúng vậy. Vấn đề là không thể nhập các lớp từ gói mặc định.

20

Có những vấn đề trên nhiều cấp độ khác nhau:

  • bạn không thể import các classes trong gói mặc định từ các lớp học mà không phải là
  • bạn sẽ nhận được lớp bốc ra vấn đề nếu bạn cố gắng giải quyết gói mặc định trong nhiều tạo phẩm
  • bạn không còn có thể sử dụng phạm vi mặc định và được bảo vệ như bình thường có thể
  • không rõ ràng sự khác biệt giữa mã của bạn và mã khác
3

Vâng. Như các câu trả lời khác đã nêu, bạn không thể tải các lớp từ gói mặc định.

Xem SO câu trả lời:

How to import a class from default package
How to access java-classes in the default-package?

Tuy nhiên, log4j đòi hỏi cấu hình được đặt trong gói mặc định. Đây là điều duy nhất hợp lý để giữ ở đó.

Chỉnh sửa: Như Sean Patrick Floyd và Michael đã chỉ ra trong phần nhận xét, bạn có thể đặt bất kỳ tệp cấu hình nào vào gói mặc định. Cảm ơn cả hai bạn vì đã chỉ ra điều này với tôi.

+3

Không chỉ cấu hình log4j, nhiều loại dữ liệu cấu hình. Nhưng không phải các lớp Java –

+0

Các tệp cấu hình Spring (applicationContext.xml) cũng thường đi ở đây. – Michael

+1

@SeanPatrickLưu ý kiến ​​của nó như thế này giúp tôi cải thiện kỹ năng của mình! Cảm ơn bạn. –