2012-02-01 59 views
6

Trình biên dịch java cho phép tôi viết định nghĩa Lớp bên trong Giao diện. Có cách sử dụng cụ thể nào về điều này không?Lớp lồng nhau bên trong giao diện

interface ClassInterface { 

    void returnSomething(); 
    int x = 10; 

    class SomeClass { 
    private int y; 

    private void classDoingSomething() {   
    } 
    } 
} 

Vui lòng giải thích.

+1

có thể trùng lặp: http://stackoverflow.com/questions/594789/practical-side-of-the-ability-to-define-a-class-within-an-interface-in-java –

+1

bản sao có thể có của [ bên trong lớp trong giao diện] (http://stackoverflow.com/questions/2400828/inner-class-within-interface) – aioobe

Trả lời

2

Bạn sẽ sử dụng nó để chặt chẽ ràng buộc một loại nhất định đến một giao diện. Đọc trang This để biết thêm thông tin và ví dụ về cách xác định lớp trong giao diện.

+0

Thật vậy .. Ở đây tôi đang sử dụng nó để nhúng [Null object] (https://en.wikipedia.org/wiki/Null_Object_pattern) thực hiện một giao diện, vì vậy tôi không cần tạo một tệp lớp cho nó. – Campa

4

Việc sử dụng giống như một lớp được lồng trong một lớp khác: nó cho phép phân lớp lớp vào giao diện. Bạn có thể tưởng tượng một cái gì đó như thế này:

public interface Switch { 

    public enum Status { 
     ON, OFF; 
    } 

    void doSwitch(); 
    Status getStatus(); 
} 

Nó tránh việc xác định một lớp đầu cấp tên SwitchStatus (vì Status có thể là một tên quá chung chung).

0

tuyên bố lớp được lồng trong giao diện sẽ là chương trình cực kỳ xấu. Giao diện là một khái niệm trừu tượng của một khái niệm, không phải là một triển khai thực hiện. Do đó, chi tiết thực hiện nếu có bỏ qua các giao diện

http://onjava.com/onjava/excerpt/HardcoreJava_chap06/index2.html

+0

_ "Hãy nhớ rằng, chỉ vì bạn có thể cắt đứt bàn tay của bạn với một cưa không có nghĩa là nó là một đặc biệt ý tưởng tốt "_ LOL ... Dù sao thì, tôi tin rằng điều này đúng với quy tắc chung, nhưng trường hợp đặc biệt có thể áp dụng mà không bị" cực kỳ tệ ". – Campa

+1

Không chắc chắn tôi đồng ý với điều này: sử dụng các lớp lồng nhau với việc triển khai bên trong một giao diện không ràng buộc việc triển khai giao diện để sử dụng mã đó. Việc triển khai được tự do bỏ qua mã triển khai lồng nhau và cung cấp việc triển khai giao diện của riêng chúng. Khi được sử dụng một cách khôn ngoan, các lớp lồng nhau có thể cho phép đóng gói/tổ chức mã tốt hơn. –

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