2013-02-19 14 views
7
public interface View{... 

public interface Control<V extends View>{... 

public class RemoteControl<C extends Control<V extends View>> implements Control<V>{... 

मुझ पर Remotecontrol वर्ग के लिए "वी फैली देखें" "टोकन पर सिंटेक्स त्रुटि" फैली ",, उम्मीद" एक देता है।जेनेरिक जेनेरिक्स: फैली हुई है "टोकन पर सिंटेक्स त्रुटि" ", उम्मीद"

मुझे लगता है कि निम्नलिखित विकल्प संभव

public class RemoteControl<C extends Control<V>,V extends View> implements Control<V> 
{... 

फिर भी मुझे आश्चर्य है कि यह एक अधिक अस्पष्ट तरीके से नहीं किया जा सकता है, तो के बाद से बाद के दृश्य का एक अनावश्यक घोषणा की आवश्यकता होगी था। अर्थात्:

public class TVRemoteControl extends RemoteControl<TVControl,TvView> implements TVControl{... 

बनाम

public class TVRemoteControl extends RemoteControl<TVControl> implements TVControl{... 

हो सकता है कि मैं सिर्फ फिर से एक बॉक्स में फंस कर रहा हूँ, लेकिन यह एक और अधिक सुरुचिपूर्ण रास्ता

+0

मैंने समाधान के साथ आने की कोशिश की है, लेकिन मुझे लगता है कि आपने पहले ही यह कहा है: यह वही तरीका नहीं किया जा सकता है जिस तरह से आप इसे चाहते हैं और आपको इसे बाद में वर्णित तरीके से करना होगा। भले ही मुझे आपकी समस्या के बारे में कोई संकेत नहीं मिल सका, मैं आपको इस सहायक साइट पर देखूंगा: http://www.angelikalanger.com/GenericsFAQ/FAQSections/ProgrammingIdioms.html – Sentry

+1

'पब्लिक क्लास रिमोट कंट्रोल <सी' के बारे में नियंत्रण > 'बढ़ाता है। क्या यह वास्तव में रिमोट कंट्रोल के लिए मायने रखता है कि किस तरह का नियंत्रण दूरस्थ रूप से नियंत्रित किया जा रहा है इसका उपयोग कर रहा है? – SpaceTrucker

+0

मैं सभी जावा जेनेरिक सवालों के लिए सहानुभूति महसूस करता हूं ... – hbhakhra

उत्तर

4

आप का सुझाव में "सामान्य जेनेरिक्स" पाने के लिए संभव है :

मुझे लगता है कि निम्नलिखित विकल्प संभव हो गया था

public class RemoteControl<C extends Control<V>,V extends View> implements Control<V>{} 

यह सही समाधान है, हालांकि मैं सामान्य रूप से के रूप में (पठनीयता के लिए) इसे लिखने होगा:

public class RemoteControl<V extends View, C extends Control<V>> implements Control<V>{} 

आप एक Control वस्तु जो भी है कि extends View एक वस्तु पर लिखा गया पर RemoteControl लिख रहे हैं। इस तरह आपको View के कार्यान्वयन की आवश्यकता है जो Control ऑब्जेक्ट टाइप करता है जो आपके RemoteControl ऑब्जेक्ट को टाइप करता है।

मुझे लगता है कि आप अपने प्रश्न की व्याख्या कर सकते हैं, मुझे V क्यों प्रदान करना है - इसे <C extends Control<V>> से नहीं बताया जाना चाहिए। करने के लिए जो, जवाब कोई है, तो आप यह सुनिश्चित करें कि Control का सही प्रकार प्रदान की जाती है V के लिए एक प्रकार प्रदान करने की आवश्यकता (यानी कि यह extends Control<V>)

आप परवाह नहीं है तो किस प्रकार ViewControl वस्तु पर टाइप है, तो आप RemoteControl में Control टाइप करने के लिए की जरूरत नहीं है:

public class RemoteControl<C extends Control> implements Control{} 

हालांकि, इस तथ्य ControlV extends View और RemoteControl implements Control<V> पर लिखा गया है, न कि पता चलता है कि आप करते हैं ...

संबंधित मुद्दे