2010-02-10 35 views
6

Tôi đang xem một số mã mà chú thích cấp lớp được sử dụng để thêm thuộc tính vào các lớp nhất định, sau đó sử dụng phản ánh các thuộc tính này được truy cập và sử dụng.Chú thích cấp lớp so với giao diện

Câu hỏi của tôi: Khi nào thích hợp để sử dụng chú thích để thêm trường mới vào một lớp, thay vì sử dụng giao diện. Một số lợi ích và hạn chế đối với điều này là gì?

+0

Tôi hơi bối rối về ý của bạn bằng cách sử dụng giao diện để thêm trường vào một lớp. Bạn có nghĩa là sử dụng một chú thích để thêm các phương thức và các phương thức getter-setter? – Uri

+2

Bạn cũng có thể chia sẻ đoạn mã tại đây không? Nó chắc chắn sẽ giúp chúng tôi, trong việc hiểu câu hỏi của bạn. –

Trả lời

8

Tôi không biết rằng chú thích sẽ thay thế giao diện, nhưng tôi có thể thấy được sức hấp dẫn. Tất cả phụ thuộc vào việc triển khai mặc dù.

Chú thích cung cấp dữ liệu meta để mô tả thêm mã, mà người tiêu dùng (phần lớn thời gian) diễn giải khi chạy bằng phản xạ. Sử dụng giao diện, hợp đồng thực hiện này được xác định rõ ràng.

Bạn có thể có:

interface CrudDao<T> { 
    Serializable create(T t); 
    T read(Serializable id); 
    void update(T t); 
    void delete(T t); 
} 

Đây sẽ là một hợp đồng cồng kềnh để thực hiện, và có khả năng sẽ phải chịu một số loại phương pháp chaining.

Thay vào đó bạn có thể làm điều gì đó như:

class SomeDao { 

    @Create 
    long create(SomeEntity e) { // code } 

    @Read 
    SomeEntity read(long id) { // code } 

    @Update 
    void update(SomeEntity e) { // code } 

    @Delete 
    void delete(SomeEntity e) { // code } 
} 

Nhược điểm là nó sẽ là rườm rà để sử dụng:

class CrudFactory { 
    long create(Class clazz, Object obj) { 
     // loop through methods 
     // find method with @Create 
     // call method 
    }  
} 

Chú thích trong ví dụ này sẽ là quá mức cần thiết một phần lớn thời gian, IMO . Có điều gì đó để nói về một hợp đồng được xác định rõ ràng và được ghi chép đầy đủ.

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