2013-02-09 55 views
5

Tôi đã xem mã của người khác và họ mã hóa nó bằng cách sử dụng tên gói.sử dụng tên gói để tạo đối tượng trong Java

String filename = ""; 

java.io.PrintWriter writer; 

writer = new java.io.PrintWriter(new java.io.FileWriter(filename)); 

Cú pháp tương đương chưa được mã hóa với tên gói? Có sử dụng mã hóa nó với tên gói kể từ khi Java cho phép nó?

Trả lời

8

Bạn phải sử dụng các tên gói (hoặc "tên đầy đủ điều kiện" - này đề cập đến tên gói và tên lớp với nhau) nếu:

  1. Bạn cần phải sử dụng hai lớp cùng tên trong cùng một tệp nguồn.
  2. Bạn không import các lớp bạn đang sử dụng vì bất kỳ lý do nào. (Thường là sự điên rồ.)
  3. Bạn import đã chỉnh sửa các lớp nhưng vẫn sử dụng tên gói vì tôi không biết.
+1

+1 vì lý do nghi ngờ # 2 :) – fvu

+0

các lớp wo có cùng tên trong cùng một tệp nguồn. do đó, nó có thể mã nó như thế (vẫn sẽ trông như điên rồ). cảm ơn! – Nicholas

+0

@Nicholas Đó là một cách hoàn toàn hợp lệ để viết Java, nó chỉ - theo kinh nghiệm của tôi - rất, rất hiếm khi * cần thiết *, và ít có thể đọc được hơn là sử dụng 'import' cho bất kỳ ai quen với JDK. Do đó nhận xét "điên rồ". – millimoose

3

Bạn có thể không sử dụng tên gói và mã vẫn sẽ là giống hệt nhau, bạn sẽ chỉ phải nhập khẩu các lớp từ gói java.io ở đầu chương trình của bạn:

import java.io.PrintWriter; 
import java.io.FileWriter; 

String filename = ""; 
PrintWriter writer; 

writer = new PrintWriter(new FileWriter(filename)); 
+0

+1 để chỉ định một cú pháp khác làm điều tương tự – Nicholas

3

Bạn có thể viết tên lớp bao gồm cả gói của nó như là một cách để tránh sự mơ hồ, nói rằng có hai lớp học được đặt tên PrintWriter trong chương trình của bạn bằng văn bản java.io.PrintWriter sẽ lấy một từ java.io. Nó không thực sự là một bất ngờ mà ngay cả trong các lớp "tiêu chuẩn" có khá một số tên trùng lặp - ví dụ như ngày tồn tại trong java.util và java.sql, Queue tồn tại trong java.util và javax.jms - vì vậy bạn sẽ gặp phải cấu trúc này theo thời gian.

+0

oh Tôi hiểu rồi! Đó là khá gọn gàng của Java! – Nicholas

7

Sử dụng fully-qualified names có ngữ nghĩa giống như các lớp đã cho là được nhập.

Có thể sử dụng FQN nếu bạn cần làm việc với hai lớp có cùng tên, nhưng trong các gói khác nhau.

import java.util.Date; 

Date date = new Date(); 
java.sql.Date sqlDate = new java.sql.Date(date); 
+0

+1 Ví dụ hay! – Nicholas

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