2012-05-15 36 views
5

Tôi biết rằng trong Java, ai đó có thể bao gồm các hằng số bên trong các giao diện bằng cách khai báo chúng public static final. Tuy nhiên, giả sử tôi có một giao diện như vậy, được gọi là I, chỉ chứa các hằng số tĩnh công cộng cuối cùng và không có chữ ký phương thức, và một lớp được gọi là C. Tại sao tôi muốn thực hiện tôi trong C? ví dụ: tại sao tôi phải làm như sau:Định nghĩa các hằng số trong giao diện là gì?

public class C implements I

Kể từ khi hằng là công khai và tĩnh, tôi sẽ không thể truy cập trực tiếp thông qua I?

Trả lời

10

Mẫu (chống) này hữu ích vì nó cho phép bạn sử dụng tên của các hằng số đó mà không cần phải thêm tiền tố cho chúng bằng I.. Đây từng là một kỹ thuật phổ biến, nhưng bây giờ bạn có thể sử dụng import static để nhập các hằng số giống như cách nó không có lợi. Một trong những lý do để tránh nó là tập hợp của các hằng số thực sự không phải là một giao diện - nó chỉ là một loạt các giá trị - và làm cho nó một giao diện cho phép bạn làm những điều kỳ lạ giống như viết

ConstantInterfaceWithNoMethods m = new ClassImplementingThatInterface; 

hoặc

if (m instanceof ConstantInterfaceWithNoMethods) 

điều này không có ý nghĩa trong ngữ cảnh này.

Hy vọng điều này sẽ hữu ích!

+0

Cảm ơn rất nhiều vì đã giải thích! Tôi sẽ chấp nhận câu trả lời này ngay khi tôi có thể :) –

0

Thông thường bạn không cần. Một lý do có thể là giao diện I là một "giao diện điểm đánh dấu".

+0

"Giao diện điểm đánh dấu" là gì? –

+1

Đó là một giao diện không có bất kỳ phương pháp nào. Tuy nhiên, không chắc chắn câu trả lời này liên quan đến câu hỏi của OP như thế nào. –

+1

@ NathanSabruka- Một giao diện đánh dấu là một giao diện như 'Serializable' không có phương thức nào trong nó và chỉ phục vụ như một" điểm đánh dấu "mà một lớp có một số thuộc tính. Kể từ khi giới thiệu các chú thích, họ cũng đã rơi ra khỏi lợi. – templatetypedef

5

Đây là mẫu Java cho phép bạn truy cập các hằng số từ giao diện mà không cần nhập tên của giao diện đó lặp đi lặp lại. Mô hình đã diễn ra từ những ngày đầu, nhiều năm trước khi enum được chuyển sang ngôn ngữ.

Một số người coi nó có vấn đề, bởi vì nó dẫn đến việc tạo giao diện không chỉ định hợp đồng.

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