2014-09-30 17 views
6

Trong RXJava [1] có một enum [2] định nghĩa làJava enum không có trường hợp

public enum JavaFxObservable { 
    ; // no instances 


    public static void staticMethod() { 
     // ... 
    } 
} 

mục đích là gì kỹ thuật này sử dụng một enum không có trường hợp? Tại sao không sử dụng một lớp tiêu chuẩn?


+1

Không chắc lắm, nhưng tôi nghĩ đó có thể là cách sạch để ngăn chặn việc mở rộng hoặc tạo ra cá thể – user902383

+0

"Lớp" này chỉ là một kho chứa các hàm tĩnh (và/hoặc hằng số). Một enum không thể được mở rộng, là một lớp cuối cùng. Cách khác là tạo một lớp cuối cùng hoặc trừu tượng với một hàm tạo riêng. Đó là tiết hơn. BTW enum cũng được sử dụng cho một singleton, với khởi tạo an toàn đồng thời. –

+0

"Tại sao không sử dụng một lớp tiêu chuẩn?" bạn có thể đưa ra một ví dụ về cách một lớp tiêu chuẩn như vậy sẽ tốt hơn/đơn giản hơn không? –

Trả lời

5

mục đích là gì kỹ thuật này sử dụng một enum không có trường hợp?

Bạn xác định, theo cách đơn giản nhất, đây là lớp không có trường hợp nào, tức là lớp tiện ích.

Tại sao không sử dụng lớp tiêu chuẩn?

An enum là một lớp học. Nó cũng là cuối cùng với một nhà xây dựng tư nhân. Bạn có thể viết

public final class JavaFxObservable { 
    private JavaFxObservable() { 
     throw new Error("Cannot create an instance of JavaFxObservable"); 
    } 
} 

Nhưng điều này có nhiều chi tiết và dễ bị lỗi hơn. ví dụ. Tôi đã thấy điều này trong mã thực

public final class Util { 
    private Util() { 
    } 

    static void someMethod() { } 

    static class DoesSomething { 
     void method() { 
      // WAT!? we can still create this utility class 
      // when we wrote more code, but it's not as good. 
      new Util().someMethod(); 
     } 
    } 
} 

Nhận xét là của tôi. ;)

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