2009-04-25 20 views
9

मैं चेतावनी निम्नलिखित हो रही है:चेतावनी: [अनियंत्रित] अनियंत्रित रूपांतरण

warning:[unchecked] unchecked conversion 
[javac]found:java.util.List 
[javac] required:java.util.List<edu.fullerton.cs476s09.espressobar.jpa.espressobar_milk> 
return query.getResultList(); 

क्या समस्या और संभावित समाधान हो सकता है।

@Stateless 
@Remote(Order.class) 
//@EntityListeners(MyListener.class) 
public class OrderBean implements Order 
{ 
    /** 
    * The entity manager object, injected by the container 
    */ 

    @PersistenceContext 

    private EntityManager manager; 

    public List<espressobar_milk> listMilk() 
    { 
     Query query = manager.createQuery("SELECT m FROM espressobar_milk m"); 
     return query.getResultList(); 
    }... 
..... 
..} 

कोई सुझाव के लिए अग्रिम धन्यवाद: मैं निम्नलिखित कोड का उपयोग कर रहा हूँ।

उत्तर

11

ठीक है, हमारे पास Query का विवरण नहीं है, लेकिन संभवतः इसकी getResultList विधि कच्ची List लौटाती है। मूल रूप से संकलक सुनिश्चित करें कि सूची getResultList द्वारा लौटाए केवल espressobar_milk के उदाहरण में शामिल होंगे (यह थोड़ा उससे कहीं अधिक सूक्ष्म है, लेकिन हम अब के लिए वहाँ छोड़ देंगे) नहीं हो सकता।

आप इसे दृढ़ता से टाइप किया है, शायद Query वर्ग को बदलकर बनाने के लिए कोशिश कर सकते हैं, या आप

@SuppressWarnings("unchecked") 

साथ विधि व्याख्या कर सकता है यदि आप आश्वस्त यह सही है कर रहे हैं लेकिन वहाँ संकलन समय को प्राप्त करने का कोई रास्ता नहीं है सुरक्षा।

+1

नोट, जब भी मैंने जावा 1.7 में विधि को एनोटेट किया था तब भी मुझे एक चेतावनी मिली।हालांकि, जब मैंने पूरी कक्षा में टिप्पणी की तो चेतावनी वास्तव में दबा दी गई थी। – Cerin

2

शायद

return query.getResultList(); 

का परिणाम के रूप में यह आशा की जाती है (List<espressobar_milk>), List और नहीं List<E> है। [http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html] यही कारण है कि यह चेतावनी दिखा रहा है। किसी भी मामले में, आप का उपयोग कर इस चेतावनी को दबाने कर सकते हैं:

@SuppressWarnings ("unchecked") 
public List<espressobar_milk> listMilk() 
{ 
    Query query = manager.createQuery("SELECT m FROM espressobar_milk m"); 
    return query.getResultList(); 
} 
1

अनियंत्रित रूपांतरण चेतावनी आम तौर पर जेनेरिक्स के लिए जावा के प्रकार मिटाना तंत्र से परिणाम। विचार यह है कि जेनेरिक का उपयोग करने वाला कोड कोड के साथ सहयोग कर सकता है जो जेनेरिक का उपयोग नहीं करता है (वास्तव में, जेनरेट कोड जेनेरिक प्रकार को छोड़ देता है)।

हालांकि, जब आप एक सामान्य जेनेरिक सूची में सामान्यता पर "काम करने" की कोशिश करते हैं तो आपको यह चेतावनी भी मिलती है (क्योंकि यह क्लास-आधारित कलाकार से अलग है जो क्लासकास्ट अपवाद फेंक देगा)। इस मामले में, getResultList द्वारा गैर-जेनेरिक सूची वापसी के लिए दूध के प्रकार पर काम करने की कोशिश करने से त्रुटि उत्पन्न होती है।

इस पर अधिक जानकारी के लिए Java Generics tutorial पढ़ें।

3

ऐसा लगता है कि आप Hibernate का उपयोग कर रहे हैं, जो वर्तमान में जेपीए 1.0 लागू कर रहा है (उम्मीद है कि हाइबरनेट इसे जारी होने पर जेपीए 2.0 लागू करेगा। (Toplink वर्तमान में जेपीए 2.0 का संदर्भ कार्यान्वयन है)। हाइबरनेट किसी भी जावा 1.5 सुविधाओं का उपयोग नहीं कर रहा है और इस प्रकार कोई सामान्य संग्रह उपलब्ध नहीं है।

1
@SuppressWarning ("unchecked") 

होना चाहिए:

@SuppressWarnings("unchecked") 
10

मैं EJB 3.1 उपयोग कर रहा हूँ और मैं एक ही समस्या थी।

TypedQuery<espressobar_milk> query = manager.createQuery("SELECT m FROM espressobar_milk m", espressobar_milk.class);   
return query.getResultList(); 

यह अनियंत्रित बातचीत चेतावनी (यदि आप अब @SuppressWarnings एनोटेशन जरूरत नहीं है) को हल करती है: मैं एक और समाधान मिल गया।

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