2013-04-07 7 views
5

मैं जावा में जेनेरिक क्लास का नकल करने के लिए मॉकिटो मॉक फ्रेमवर्क का उपयोग कर रहा हूं। ढांचे का उपयोग प्रलेखन से काफी स्पष्ट प्रतीत होता है, मुझे जेनेरिक कक्षाओं का मज़ाक उड़ाने के लिए एक उदाहरण नहीं मिला।जेनेरिक विधियों में जेनेरिक क्लासेस

public static <T> T mock(Class<T> classToMock) { 
    ... 
} 

मैं एक सामान्य प्रकार IState<StateId, Event> है और मैं उपरोक्त विधि का उपयोग कर इसे का दृष्टांत हैं: नकली ढांचे निम्न विधि में शामिल है।

IState<StateId, Event> mockState = Mockito.mock(IState.class); 

मैं इस कोड के लिए निम्न चेतावनी मिलती है::

Type safety: The expression of type IState needs unchecked conversion to conform to IState<StateId,Event> 

मुझे लगता है कि मैं जानता हूँ कि समस्या क्या है मैं निम्नलिखित की कोशिश की। mock विधि IState का एक प्रकार देता है, लेकिन जिस चर को मैं असाइन कर रहा हूं वह एक विशेष प्रकार IState<StateId, Event> है, इसलिए मुझे किसी भी तरह यह बताने की ज़रूरत है कि मैं जिस वर्ग को बना रहा हूं वह विशेष रूप से IState<StateId, Event> है, लेकिन मुझे नहीं पता कि वाक्यविन्यास क्या है ये है। मैंने निम्नलिखित लोगों की कोशिश की, लेकिन उन्होंने सभी को वाक्यविन्यास त्रुटियां दीं।

IState<StateId, Event> mockState = Mockito.mock(IState<StateId, Event>.class); 
IState<StateId, Event> mockState = Mockito.mock(IState.class<StateId, Event>); 
+0

चूंकि यह एक परीक्षण है (मुझे मॉकिटो के कारण लगता है) आप केवल चेतावनी को अनदेखा कर सकते हैं, 'आईएसटीएटी' नहीं है। <स्टेटआईडी, इवेंट> क्लास ''class' –

+0

@RC के लिए: मैं ऐसा कर सकता हूं, लेकिन मैं मैं अभी भी उत्सुक हूं कि जावा में इन चीजों को कैसे संभाला जाता है। – petersohn

उत्तर

1

जावा में जेनिक्स टाइप एरर के माध्यम से लागू किए जाते हैं। इसका मतलब है कि पैरामीटरयुक्त वर्गों को कंपाइलर द्वारा चेक किया जाता है, लेकिन रनटाइम पर सभी वर्ग "कच्चे" होते हैं (पुन: संक्रमणीय कारणों के लिए)। इसका एक परिणाम यह है कि केवल एक वर्ग वस्तु IState का प्रतिनिधित्व करती है, और सभी संभावित मानकों के अनुरूप कक्षाओं की अनंत संख्या नहीं है।

चेतावनी को अक्षम करने के लिए, लाइन से ठीक पहले @SuppressWarning("unchecked") जोड़ें।

+0

दाएं। लेकिन इस मामले में, मैं चेतावनी से कैसे छुटकारा पा सकता हूं? – petersohn

+0

@petersohn मैंने अपना जवाब संपादित किया। – WilQu

+0

यह काम करता है, सिवाय इसके कि इसे '@SuppressWarnings ("अनचेक") कहा जाता है और मुझे इसे विधि से पहले रखना होगा। इसके अलावा, यह बहुत ही सुरुचिपूर्ण नहीं है। – petersohn

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