2010-11-26 6 views
8

मैं ग्रहण में इस त्रुटि हो रही है, जबकिहो रही त्रुटि: इंटरफ़ेस ऑब्जर्वर विभिन्न तर्क के साथ एक से अधिक बार लागू नहीं किया जा सकता है:

इंटरफ़ेस ऑब्जर्वर एक बार से अधिक से लागू नहीं किया जा सकता है एक GWT एप्लिकेशन लेखन साथ अलग तर्क: ऑब्जर्वर <CompositeListData> और ऑब्जर्वर <DialogBoxAuthenticate>

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

यहां इंटरफ़ेस

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

है यह सही है? हर संभव घटना के लिए पर्यवेक्षक कक्षाओं की भीड़ पैदा किए बिना मैं इस समस्या को कैसे प्राप्त कर सकता हूं?

उत्तर

3

टाइप मिरर के कारण आप एक ही इंटरफेस को दो बार (विभिन्न प्रकार के पैरामीटर के साथ) लागू नहीं कर सकते हैं। तो, ग्रहण त्रुटि जो आप प्राप्त कर रहे हैं वह सही है।

आप सभी संभव "टी" के लिए बेस क्लास जोड़ सकते हैं, जो इन कक्षाओं के दायरे के आधार पर सीमित और उपयोगी नहीं हो सकता है। और, आपने एक समाधान का अनुरोध किया है जो आपको हर संभव घटना के लिए ऑब्जर्वर कक्षाओं (मैं इंटरफेस मान रहा हूं) बनाने से रोकता हूं, ठीक है, मैं नहीं देख सकता कि आप संकलन समय सुरक्षा समझौता किए बिना और कैसे करेंगे।

मेरा सुझाव है निम्नलिखित

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

interface DialogBoxAuthenticateObserver extends Observer<DialogBoxAuthenticate>{ 
} 

कोड अव्यवस्था भयानक नहीं है और अगर आप उन सब को एक फ़ाइल में जगह है, वे संदर्भ और बनाए रखने के लिए आसान हो जाएगा। आशा है कि मैं मदद की है

संपादित: वापस stackoverflow करने के लिए कुछ गूगल (जो मुझे बताया पर चारों ओर से खुदाई के बाद !, अपने प्रश्न एक अलग फैशन में पूछा गया था और इसी के जवाब दिए here

+1

तो, मैंने अभी अपनी वर्तमान (लगभग समान) समस्या पर इस समाधान की कोशिश की, और इस समाधान ने काम नहीं किया। – Peaches491

+8

आप ऐसा नहीं कर सकते हैं, या तो। आपको एक ही एकाधिक इंटरफ़ेस त्रुटि मिल जाएगी। – Dzik

0

समग्र पहले से ही पर्यवेक्षक को लागू करना होगा। क्या वास्तव में इसका इरादा है? आप इस कंपोजिटवार्डलिस्ट क्लास को एक बार में दो तरीकों का पालन करना चाहते हैं?

0

सुनिश्चित नहीं हैं कि इस मदद कर सकते हैं, लेकिन मैं आज ही जावा संकलन त्रुटि में आए

मैं आंशिक रूप से सभी साझा कार्यान्वयन निकाल कर मेरे मामले हल मैं एक parametrized सार वर्ग को मिल सकता है:।

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 */ 
     } 
    } 
}