2015-01-15 17 views
6

Giáo viên trong các bài học lập trình của chúng tôi đang nói về "tên không đủ tiêu chuẩn", nhưng tôi tự hỏi chúng thực sự là gì.Tên không đủ tiêu chuẩn trong Java

Tôi nghi ngờ rằng những thứ như tên phương pháp không đủ tiêu chuẩn, nhưng tôi không chắc chắn.

Có ai có thể giải thích điều này cho tôi không? Tôi cần phải biết điều này bởi vì tôi cần phải giải thích cách Java trông như một cái tên không đủ tiêu chuẩn.

+0

Đây là một câu hỏi Stack Overflow tuyệt vời: nó đơn giản với một câu trả lời rõ ràng. Chỉ vì bạn có thể tìm thấy câu trả lời ở nơi khác (theo ý kiến ​​của tôi), không có nghĩa là SO không nên có câu trả lời. Tôi đã không nhìn xem nếu nó là một bản sao. – Thomas

+0

@Thomas Quá tệ cho thấy nỗ lực nghiên cứu không. Đó là một lý do "mạnh mẽ" đối với một số người để downvote. – Tom

+0

Tôi ở cùng bạn; tuy nhiên, một bình luận khác (mà tôi đã gắn cờ, chống lại bình luận ở trên đã được viết), là đồng nghĩa, không mang tính xây dựng, và đã cho SO một đại diện xấu. – Thomas

Trả lời

15

Tên tiêu chuẩn là một với một đường dẫn đầy đủ, ví dụ .:

java.util.ArrayList list; 

Một tên không đủ tiêu chuẩn có chỉ là phần cuối cùng:

import java.util.*; 

ArrayList list; 

Thuật ngữ này có thể áp dụng đối với các lĩnh vực và phương pháp quá.


Vì vậy, nếu bạn có thể nhập các lớp học, tại sao bạn cần sử dụng tên đủ điều kiện?

Bạn cần nó khi bạn đang sử dụng hai lớp học, trong khi chúng từ các gói khác nhau, chia sẻ cùng một tên. Một ví dụ điển hình là lớp ridiculously đặt tên từ JDK:

java.sql.Date 

mà tình cờ kéo dài

java.util.Date 

Đó là lý chung cần tham chiếu đến các trường hợp của cả lớp, vì vậy bạn cần có mã trông giống như:

public void process(java.util.Date fromDate) { 
    RowSet rows = <run query with fromDate as parameter> 
    while (rows.nsxt()) { 
     java.sql.Date date = rows.getDate(1); 
     // code that needs date 
    } 
} 

Nếu bạn sử dụng hai lớp học cùng tên, không có đủ điều kiện tránh ít nhất một lớp - bạn có thể nhập một lớp, nhưng nhập cả hai đều tạo ra sự mơ hồ.

5

Tên đủ điều kiện trong Java bao gồm gói cụ thể mà lớp, giao diện, enum hoặc trường có nguồn gốc từ đó.

Ví dụ: java.util.ArrayList là tên đầy đủ.

Tên không đủ tiêu chuẩn chỉ đơn giản là lớp, giao diện, enum hoặc trường mà không có thông tin gói.

Ví dụ: ArrayList

+4

Chúng ta phải là cặp song sinh được tách ra khi sinh ... – Bohemian

2

Ví dụ com.yourcompany.domain.Person là tên lớp đầy đủ và Person là tên lớp hoặc tên lớp không đủ tiêu chuẩn.

1

Qualified Tên:org.springframework.jdbc.core.JdbcTemplate
Nó có tên gói org.springframework.jdbc.core sau đó tên lớp JdbcTemplate

không đủ điều kiện Tên:JdbcTemplate Nó được chỉ tên lớp không có tên gói.

Ví dụ: tên đủ điều kiện là toàn bộ địa chỉ nhà bạn và tên không đủ tiêu chuẩn chỉ là tên nhà của bạn.

0

Thêm vào cuộc trò chuyện một mảnh chưa được đề cập, nhưng (và đó là không trực tiếp hỏi về nhưng tôi tin là một adendum hữu ích cho cuộc nói chuyện):

Tất cả các tên trong Java đòi hỏi trình độ chuyên môn; tuy nhiên, một số không thể thiếu trong hoạt động của Java mà chúng được giả định - hoặc, được mặc định - là "trong lớp" mà bạn đang mã hóa (hoặc import ed). Liskov (2000) đưa ra một ví dụ tuyệt vời về điều này: java.lang - lớp có chứa các đối tượng như String.

Bạn thường sẽ thấy các tên không đủ tiêu chuẩn trong Java. Điều này thường phải làm với vị trí của một lớp hoặc phương thức liên quan đến lớp mà bạn đang cố gắng truy cập nó (cùng một gói). Trên đây, các áp phích khác đã đề cập đến khái niệm packages trong Java.

Các gói cho phép bạn giải quyết - hoặc, có lẽ, ngăn chặn tốt hơn - các xung đột đặt tên. Mỗi gói trong một chương trình có thể nhân đôi tên lớp, vv của một gói khác. Trong trường hợp này, các tên đủ điều kiện được sử dụng để truy cập vào lớp đúng (như được thấy trong các câu trả lời khác). Bạn cũng có thể nhập một gói để tránh sử dụng tên đầy đủ của nó; tuy nhiên, nếu hai lớp được nhập có chứa một va chạm đặt tên, bạn sẽ có một chút vấn đề.

+0

Tên không đủ tiêu chuẩn cũng được sử dụng khi đánh giá các trường hợp của cấu trúc switch() với hằng số enum được xác định trước. –

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