मैं थोड़ी देर के लिए जावा जेनरिक के साथ सीख रहा हूं और प्रयोग कर रहा हूं लेकिन मैंने कुछ ऐसा किया है जिसे मैं समझा नहीं सकता। कुछ प्रयोग के माध्यम सेजावा में जेनेरिक टाइपेड इनर क्लासेस
C:\Answer.java:8: incompatible types
found : generics.Question.Sub<java.lang.String>
required: generics.Question.Sub<java.lang.String>
Sub<String> s = q.getSub(String.class);
1 error
अब, जब यह एक अद्भुत छुपे त्रुटि संदेश देता चलाया जाता है
import generics.Question.Sub;
public class Answer {
public static void main(String [] args) {
Question q = new Question();
Sub<String> s = q.getSub(String.class);
s.add("");
}
}
:
public class Question {
public <T> Sub<T> getSub(Class<T> c) {
return new Sub<T>(c);
}
public class Sub<S> {
private Class<S> c;
public Sub(Class<S> c) {
this.c = c;
}
public void add(S s) {
}
}
}
और परीक्षण कोड: उदाहरण के लिए निम्नलिखित कोड ले लो मैंने संकलक त्रुटि को रोकने के लिए कैसे काम किया है। मैं या तो सब क्लास को एक स्थिर आंतरिक कक्षा बना सकता हूं, या मुझे उप वर्ग को प्रश्न के रूप में संदर्भित करने की आवश्यकता है। सब्स < स्ट्रिंग >। मैं जो नहीं कर सकता वह समझाता है कि मुझे ऐसा करने की आवश्यकता क्यों है।
मैंने जेनेरिक पर जावा दस्तावेज़ों के कुछ पढ़ने को पढ़ा है लेकिन कोई भी इस विशेष मामले को कवर नहीं करता है।
क्या कोई यह समझा सकता है कि कोड वर्तमान स्वरूप में एक असंगत प्रकार क्यों है?
-Edit-
इस करीब मैं देख सकता हूँ कि मैं Netbeans के बाहर समान व्यवहार प्राप्त को देखते हुए। अगर मैं निम्नलिखित संरचना में कोड है:
generics\
generics\Question.java
generics\Answer.java
जब मैं फ़ाइलों को एक साथ संकलन, मैं नहीं त्रुटि मिलती है:
C:\>javac generics\Question.java generics\Answer.java
C:\>
हालांकि, जब मैं पहली बार प्रश्न संकलन और उसके बाद उत्तर दें, मैं त्रुटि प्राप्त करें:
C:\>javac generics\Question.java
C:\>javac generics\Answer.java
generics\Answer.java:8: incompatible types
found : generics.Question.Sub<java.lang.String>
required: generics.Question.Sub<java.lang.String>
Sub<String> s = q.getSub(String.class);
^
1 error
मैंने टाइप एरर के बारे में कुछ बताया है। क्या इस स्थिति में यह मामला है?
यह कोड ग्रहण में मेरे लिए काम करता है। आप किस आईडीई/कंपाइलर का उपयोग कर रहे हैं? – polygenelubricants
मैं जावा संस्करण "1.6.0_15" – Steen
जेडीके 1.5.0_14 के साथ नेटबीन्स 6.7.1 का उपयोग कर समस्याओं के बिना इसे संकलित भी कर सकता हूं। अगर मैं नेटबीन्स के बाहर संकलित करता हूं तो मैं सहमत हूं, यह ठीक से संकलित करता है। मैं आगे की जांच करूंगा। प्रतिक्रिया के लिए धन्यवाद। – gencoreoperative