मैंने एक अधिसूचना प्रबंधक वर्ग बनाया, जो कि आप कुछ सामान्य अधिसूचना सेवा में एक सामान्य श्रोता पंजीकृत करते हैं।जावा: आप एक सामान्य प्रकार में निर्दिष्ट जेनेरिक प्रकार के समान होने के लिए कक्षा प्रकार पैरामीटर को कैसे लागू करते हैं?
public static <E> void registerNotify(Class<E> type, INotificationListener<E> listener) {
@SuppressWarnings("unchecked")
INotificationService<E> service = (INotificationService<E>) NotificationServiceFactory.get(type);
service.registerNotificationListener(listener);
}
तो, एक विशेष प्रकार के कुछ INotificationListener के लिए मैं उपयोगकर्ता के लिए मजबूर करना चाहते हैं, जब इस विधि बुला, निर्दिष्ट करने के लिए: NotificationManager वर्ग में मैं एक सेवा के साथ एक श्रोता के पंजीकरण के लिए एक सामान्य विधि है श्रोता के समान प्रकार। एक ही प्रकार के सभी इनोटिफिकेशन लिस्टेनर्स के लिए टाइप मैप्स, हालांकि यह विधि लागू नहीं करने के लिए जो मैं लागू करने की कोशिश कर रहा हूं उसे लागू नहीं करती है। उदाहरण के लिए, मैं कॉल कर सकता हूं:
INotificationListener<Location> locationListener = this;
NotificationManager.registerNotify(String.class, locationListener);
और कोड ठीक संकलित करता है। मैंने सोचा कि यह लागू होगा निम्नलिखित है:
INotificationListener<Location> locationListener = this;
NotificationManager.registerNotify(Location.class, locationListener);
इसे पूरा करने के तरीके पर कोई विचार?
अद्यतन:
mixup के लिए क्षमा करें, इसके बाद के संस्करण तथ्य काम में करता है।
public static <E> void broadcastNotify(Class<E> type, E data)
{
@SuppressWarnings("unchecked")
INotificationService<E> service = (INotificationService<E>) NotificationServiceFactory.get(type);
service.notifyListeners(data);
}
और बुला: एक ही कक्षा जो काम नहीं करता है में विधि वास्तव में निम्नलिखित है
Location location = new Location();
NotificationManager.broadcastNotify(Object.class, location);
एक संकलन त्रुटि है, जो है मैं यह करने के लिए करना चाहते हैं क्या कारण नहीं है।
'अधिसूचना सेवा कारखाना # प्राप्त() 'के घोषित रिटर्न प्रकार क्या है? –
यह INOTificationService > है। फैक्ट्री में एक नक्शा होता है, जो क्लास टाइप नामों को इनोटिफिकेशन सर्विसेज में मैप करता है। मुझे लगता है कि यह शायद INOTificationService होना चाहिए, लेकिन मैं यह सुनिश्चित कैसे कर सकता हूं कि जब उपयोगकर्ता रजिस्टर में गलत वर्ग पास करता है तो उपयोगकर्ता को संकलन त्रुटि मिलती है? –
मुझे यकीन नहीं है, लेकिन जब मैं 'String.class' (ग्रहण हेलीओस SR2) पास करने का प्रयास करता हूं तो मुझे वांछित संकलन त्रुटि मिलती है। क्या आप वाकई कोड चला रहे हैं जो आपको लगता है कि आप चल रहे हैं? या आप जावैक या एक अलग आईडीई का उपयोग कर रहे हैं? – BalusC