2010-08-21 34 views
6

Trong Java, Có cách nào để ngăn không cho mở rộng giao diện.Cách ngăn giao diện mở rộng

Vì không thể thêm final vào interface, tôi đã tò mò muốn biết liệu có cách nào để ngăn chặn việc mở rộng Giao diện hay không.

+4

Động lực để làm như vậy là gì? Không có gì để đạt được, theo ý kiến ​​của tôi, ngữ nghĩa, nếu bạn hiểu giao diện là gì và chúng được sử dụng cho cái gì. – Santa

+0

nếu bạn không tạo giao diện, nó không thể được mở rộng trừ khi some1 khác tạo ra nó, vì vậy hãy cho no1 biết. – IAdapter

Trả lời

2

Không có cách nào để ngăn chặn việc mở rộng giao diện.

Bạn có thể phát hiện xem ai đó đã mở rộng giao diện của bạn trong thời gian chạy bằng cách sử dụng sự phản chiếu.

+0

Bạn có thể giải thích về cách chúng ta có thể tìm thấy giao diện đã được mở rộng thông qua sự phản ánh không? – JWhiz

+0

@JWhiz: Câu hỏi thứ hai của bạn rất giống với câu hỏi này: http://stackoverflow.com/questions/435890/find-java-classes-implementing-an-interface Sự khác biệt duy nhất là bạn quan tâm đến giao diện, không phải lớp học nhưng kỹ thuật thì giống nhau. –

3

Vấn đề ở đây là vấn đề khái niệm. Giao diện có nghĩa là được mở rộng bởi vì chúng không thể được sử dụng như là.

Những gì bạn có thể làm là đặt giao diện bên trong một gói và đặt chế độ hiển thị mặc định. Với chỉ các lớp bên trong gói đó mới có thể thực hiện giao diện đó.

Nhưng với giải pháp đó, bạn cũng mất khả năng sử dụng giao diện bên ngoài gói đó, vì vậy nó không có giải pháp thực sự.

+0

Tôi nghĩ rằng anh ấy có nghĩa là một giao diện khác được mở rộng từ giao diện đã cho. –

+3

Đúng, nhưng khái niệm vẫn là chìa khóa: một giao diện chỉ là một cách để nói rằng một số phương thức hoạt động theo một cách nhất định. Mở rộng một giao diện sau đó chỉ nói rằng có một số giao diện khác trong hệ thống. Nó không có ý nghĩa để cấm xác định một giao diện theo cùng một cách mà từ khóa "cuối cùng" làm việc với các lớp, trong đó mã thực tế có thể sẽ được sử dụng theo cách trái với thiết kế ban đầu nếu lớp đó được mở rộng. –

0

Điều này rất giống với câu hỏi được hỏi trước đây - final interface in java.

Tôi đã đưa ra hai câu trả lời.

  1. Có, thông qua byte code engineering. Không thể mở rộng giao diện kết quả nhưng không có giá trị thực tế
  2. Có, annotations là các giao diện không thể được mở rộng bởi các giao diện khác.

Ngoài ra, bạn có thể đặt giao diện bên trong một lớp, cung cấp cho nó trình sửa đổi truy cập riêng tư và đảm bảo không có giao diện nào trong tệp lớp đó mở rộng nó.

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