2016-07-06 5 views
5

तो मैं एक वर्ग है:नियमित कक्षा के साथ प्रकार का दृष्टांत नहीं कर सकते

public class DynQSimModule<T extends Mobsim> extends AbstractModule 
{ 

    private Class<? extends javax.inject.Provider<? extends T>> providerClass; 

    public DynQSimModule(Class<? extends javax.inject.Provider<? extends T>> providerClass) 
    { 
    this.providerClass = providerClass; 
    } 

    //some methods down here 
} 

और जब मैं फोन करने के लिए प्रयास करें:

controler.addOverridingModule(new DynQSimModule<>(AMoDQSimProvider.class)); 

ग्रहण मुझसे कहता है यह "DynQSimModule < के लिए प्रकार तर्क अनुमान नहीं लगा सकता> मैं समझता हूं कि ऐसा इसलिए है क्योंकि मैंने <> में कुछ भी नहीं रखा है, लेकिन उदाहरण कोड जो मैं बंद कर रहा हूं, उसी सटीक वाक्यविन्यास का उपयोग करता है और पूरी तरह से ठीक चलता है ...

व्हील

controler.addOverridingModule(new DynQSimModule<? extends Mobsim(AMoDQSimProvider.class)); 

ग्रहण मुझसे कहता है:: n मैं की तरह कुछ में डाल दिया "। प्रकार DynQSimModule का दृष्टांत नहीं कर सकते"

मुझे पता है कि यह एक समस्या है जब आप कोशिश करते हैं और एक इंटरफ़ेस या अमूर्त वर्ग, लेकिन DynQSimModule का दृष्टांत है उनमें से कोई नहीं है ...

कोई भी मदद महान होगी।

धन्यवाद!

+1

डायमंड ऑपरेटर का उपयोग करना ठीक है। मैंने ग्रहण मर्स के साथ इस त्रुटि संदेश का अनुभव किया है और असली कारण वास्तव में एक लापता आयात था। सुनिश्चित करें कि आपको लाइन पर कोई त्रुटि नहीं है, उदाहरण के लिए AMODQSSimProvider का आयात गुम है या अजीब वर्ग के नाम, आदि में एक टाइपो –

+0

आपका जेडीके संस्करण क्या है? –

+0

मैंने अभी जेडीके का नवीनतम संस्करण स्थापित किया है और इसे मेरे टर्मिनल से प्राप्त किया है: 'जावा संस्करण "1.8.0_91" जावा (टीएम) एसई रनटाइम पर्यावरण (1.8.0_91-बी 14) जावा हॉटस्पॉट (टीएम) 64- बिट सर्वर वीएम (25.91-बी 14, मिश्रित मोड का निर्माण) ' मुझे अभी भी "प्रकार का अनुमान नहीं लगाया जा सकता है" समस्या है ... –

उत्तर

2

मुझे लगता है कि आप जेडीके 7 का उपयोग कर रहे हैं। यदि ऐसा है तो new DynQSimModule<>(AMoDQSimProvider.class) संकलित नहीं होगा क्योंकि जावा 7 पारित पैरामीटर के अनुमानित प्रकार के लिए लक्ष्य टाइपिंग का उपयोग नहीं करता है।

new DynQSimModule<? extends Mobsim>(AMoDQSimProvider.class) भी संकलित नहीं होगा क्योंकि आप ऑब्जेक्ट सृजन में वाइल्ड कार्ड नोटेशन का उपयोग नहीं कर सकते हैं।

इसे हल करने के लिए आपको new DynQSimModule<>(...) में सटीक प्रकार प्रदान करना होगा या यदि यह संभव है, तो आप जावा 8 में अपग्रेड कर सकते हैं जो लक्ष्य प्रकार अनुमान सुविधा प्रदान करता है।

कोड नीचे दिए गए उदाहरण जावा 7 में संकलन नहीं होगा के लिए लेकिन जावा में 8 संकलन होगा:

public static void test(List<String> list) { 
    // some code 
} 

public static void main(String[] args) { 
    test(new ArrayList<>()); // will not compile in Java 7 but it is legal in Java 8+ 
} 

अधिक जावा 8 Target Type Inference पर।

+0

मैंने अपने टर्मिनल में जावा-वर्जन किया और मिला: जावा संस्करण "1.8.0_65 " जावा (टीएम) एसई रनटाइम पर्यावरण (निर्माण 1.8.0_65-बी 17) जावा हॉटस्पॉट (टीएम) 64-बिट सर्वर वीएम (25.65-बी 01, मिश्रित मोड का निर्माण) मुझे लगता है कि मुझे जेआरई के बजाय जेडीके इंस्टॉल करना है ? –

+0

आप अपने जेडीके संस्करण की जांच के लिए 'javac -version' का उपयोग कर सकते हैं। यदि यह जेडीके 7 है तो हाँ, आपको जेडीके 8. –

+0

इंस्टॉल करना होगा। यह 'javac 1.8.0_91' कहता है, क्या इसका मतलब है कि मैं जेडीके 8 चला रहा हूं? –

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