2011-09-12 12 views
26

मैं एक अजीब व्यवहार पर ठोकर खा रहा हूं जिसे मैं समझ नहीं पा रहा हूं।जेनिक्स में जेनिक्स में @SuppressWarnings ("अनचेक") जोड़ें एकल रेखा से ग्रहण कंपाइलर त्रुटि

मुझे एक सामान्य को एक स्ट्रिंग डालना है और यह एक चेतावनी उत्पन्न कर रहा है।

Type safety : Unchecked cast from String to T 
  • अगर मैं विधि घोषणा ऊपर @SuppressWarnings("unchecked") जोड़ने यह ठीक काम करता है।

  • यदि मैं इसे असाइनमेंट के ऊपर जोड़ता हूं तो यह ग्रहण में एक कंपाइलर त्रुटि उत्पन्न करता है।

यह ठीक काम करता है।

@SuppressWarnings("unchecked") 
public <T> T search(final String query){ 
T returnValue = null; 
... 
if(returnValue instanceof String){ 
    returnValue = (T) collection.getString(attrName); 
} 

यह ठीक काम नहीं करता है।

public <T> T search(final String query){ 
T returnValue = null; 
... 
if(returnValue instanceof String){ 
    @SuppressWarnings("unchecked") // Compiler error: "returnValue cannot be resolved to a type" 
    returnValue = (T) collection.getString(attrName); 
} 

कोई विचार क्या चेतावनी को दबाने के दो तरीकों के बीच विसंगति पैदा कर रहा है?

उत्तर

41

आप मनमाने ढंग से अभिव्यक्तियों पर एनोटेशन नहीं कर सकते हैं (फिर भी? शायद वे इसे बाद में जोड़ देंगे)।

आप कर सकते हैं हालांकि स्थानीय परिवर्तनीय घोषणाओं पर टिप्पणियां हैं।

तो क्या संकलक की कोशिश करता है यहाँ करने के लिए returnValue एक प्रकार के रूप में व्याख्या करने के लिए और विफल रहता है (के रूप में है कि केवल बात यह है कि एक विधि शरीर के अंदर एक एनोटेशन का पालन कर सकते है) है।

घोषणा returnValue की इस मामले में मदद नहीं करता है पर एनोटेशन लाना। हालांकि आप एक नया स्थानीय चर बना सकते हैं जहां आप प्रारंभकर्ता में कलाकार का प्रदर्शन करते हैं और एनोटेट करते हैं।

@SuppressWarnings("unchecked") 
T string = (T) collection.getString(attrName); 
returnValue = string; 
+0

, यहाँ आया क्योंकि मैं त्रुटि समझ में नहीं आया _ "टोकन 'परिणाम' पर सिंटेक्स त्रुटि, VariableDeclaratorId इस टोकन के बाद उम्मीद" _ ग्रहण में। आपका स्पष्टीकरण क्या संकलक कोशिश करता है और यह क्यों विफल रहता है महान है! अगर कोई और इस वाक्यविन्यास त्रुटि की खोज करता है तो बस इस टिप्पणी को जोड़ना। – user1438038

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