2010-11-26 28 views
8

Tôi nhận được lỗi này trong Eclipse khi viết một ứng dụng GWTBắt lỗi cho giao diện chung: The Observer giao diện không thể được thực hiện nhiều hơn một lần với lý lẽ khác nhau:

The Observer interface không thể thực hiện nhiều hơn một lần với lập luận khác nhau: Observer <CompositeListData> và Observer <DialogBoxAuthenticate>

public class CompositeWordLists extends Composite implements Observer<DialogBoxAuthenticate>, Observer<CompositeListData> 

Dưới đây là giao diện

public interface Observer<T> { 
    public void update(T o); 
} 

Đây có phải là đúng? Làm thế nào tôi có thể giải quyết vấn đề này mà không phải tạo ra vô số lớp Observer cho mọi sự kiện có thể xảy ra?

Trả lời

3

Vì loại tẩy xoá, bạn không thể triển khai cùng một giao diện hai lần (với các thông số loại khác nhau). Vì vậy, lỗi nhật thực mà bạn nhận được là chính xác.

Bạn có thể thêm một lớp cơ sở cho tất cả "T" có thể, có thể giới hạn và không hữu ích tùy thuộc vào phạm vi của các lớp này. Và, bạn đã yêu cầu một giải pháp ngăn không cho bạn tạo nhiều lớp Observer (tôi giả sử giao diện) cho mọi sự kiện có thể, tôi không thể thấy bạn sẽ làm như thế nào mà không ảnh hưởng đến an toàn biên dịch.

tôi xin đề nghị như sau

interface Observer<T>{ 
    public void update (T o); 
} 

interface DialogBoxAuthenticateObserver extends Observer<DialogBoxAuthenticate>{ 
} 

mã lộn xộn không phải là khủng khiếp và nếu bạn đặt chúng tất cả trong một tập tin, họ sẽ dễ dàng tham khảo và duy trì. Hy vọng tôi đã giúp

EDIT: Sau khi một số đào xung quanh trên google (mà chỉ tôi trở lại stackoverflow !, câu hỏi của bạn đã được hỏi trong một thời trang khác nhau và trả lời tương tự here

+1

Vì vậy, tôi vừa thử giải pháp này trên vấn đề hiện tại của tôi (gần như giống hệt), và giải pháp này không hoạt động. – Peaches491

+8

Bạn cũng không thể làm điều đó. Bạn sẽ nhận được cùng một lỗi giao diện. – Dzik

0

Hỗn hợp phải đã triển khai Trình theo dõi. Đó là những gì thực sự dự định? Bạn muốn lớp CompositeWordLists này quan sát hai cách cùng một lúc?

0

Không chắc điều này có thể giúp đỡ, nhưng tôi đã xem qua cùng một lỗi biên dịch Java hiện nay

tôi phần nào giải quyết trường hợp của tôi bằng cách chiết xuất tất cả các thực hiện chia sẻ tôi có thể nhận được đến một parametrized lớp trừu tượng:.

public enum Example { 
    ; 
    static interface Observer<T> { public void update (T o); } 
    static abstract AbstractObserver<T> implements Observer<T> { 
     public void update (T o) { /* shared stuff I can put here */ } 
    } 
    static Composite extends AbstractObserver<Parameter1> { 
     public void update (T o) { 
      super(o); 
      /* type-specific code here */ 
     } 
    } 
    static CompositeWordLists extends AbstractObserver<Parameter2> { 
     public void update (T o) { 
      super(o); 
      /* type-specific code here */ 
     } 
    } 
} 
Các vấn đề liên quan