2012-01-26 12 views
5
final Criteria crit = session.createCriteria(MyClass.class); 
final List<MyClass> myClassList = crit.list(); 

परिणाम: प्रकार की सुरक्षा: प्रकार सूची की अभिव्यक्ति अनुरूपबचें हाइबरनेट मापदंड क्वेरी के साथ प्रकार सुरक्षा चेतावनी इस में

उनकी चेतावनी को निकालने के लिए एक विधि है सूची में, के रूप में अनियंत्रित रूपांतरण की जरूरत है मैं इस का उपयोग करते हुए कोई त्रुटि मिलती है:

final List<MyClass> myClassList = Collections.checkedList(MyClass.class, crit.list()); 

उत्तर

6

ठीक है, आप का उपयोग कर सकते हैं:

@SuppressWarnings("unchecked") 

घोषणा से पहले ...

ध्यान दें कि यह केवल चेतावनी को दबाएगा - यह कोड को सुरक्षित बनाने के लिए कुछ भी नहीं करेगा। इस मामले में, मैं व्यक्तिगत रूप से इस बारे में पर्याप्त खुश रहूंगा; मैं सही चीज़ करने के लिए हाइबरनेट पर भरोसा करता हूं।

+0

@EvertonAgner: मैं प्रश्न के "चेतावनी को हटा" से जा रहा था। –

+0

हाँ हाँ, मुझे पता है ... मेरा मतलब था कि हमें पता होना चाहिए कि क्या वह इस मुद्दे को हल करना चाहता है या अगर उसके पास चेतावनी के बारे में ओसीडी है ........ जैसा कि मैं करता हूं * lol – everton

+2

यदि आप किसी पर निर्भर करते हैं तीसरे पक्ष के एपीआई जो अनियमित संग्रह लौटाते हैं, चेतावनी को दबाने के अलावा आप उपयोगी रूप से अन्य कुछ भी नहीं कर सकते हैं। और एक टिप्पणी जोड़ें जिसमें आप यह गारंटी दे सकते हैं कि संग्रह के तत्व वास्तव में सही प्रकार के हैं। –

4

अपने कोड

final List<MyClass> myClassList 
    = Collections.checkedList(MyClass.class, crit.list()); 

में आप सिर्फ checkedList() पर तर्कों की क्रम उलटा की जरूरत है।

बीटीडब्ल्यू आप अपने कोड को अधिक संक्षिप्त बनाने के लिए विधि आयात कर सकते हैं। इसके अलावा, मुझे checkedList() के बारे में पता नहीं था - हेड-अप के लिए धन्यवाद!

संपादित करें: checkedList() जो भी आप चाहते हैं वह नहीं करता - जैसा कि मुझे एहसास होना चाहिए था कि अगर मैंने जवाब देने से पहले ठीक से सोचा था तो मुझे एहसास होना चाहिए था।

checkedList() सूची में जोड़े गए किसी भी तत्व के प्रकारों की जांच करेगा और तुरंत विफल हो जाएगा। एक सामान्य सूची के विपरीत जो आपको गलत प्रकारों को रखने की अनुमति देता है, और केवल पुनर्प्राप्ति पर विफल रहता है। आपके मामले में इससे कोई फर्क नहीं पड़ता क्योंकि आप खुद को आइटम डालने नहीं जा रहे हैं (मुझे लगता है)।

जॉन स्कीट का उत्तर (@SuppressWarnings("unchecked")) सही है।

+0

मुझे अभी भी चेतावनी मिलती है ... पैरामीटर को वापस करने के बाद – NimChimpsky

+0

क्षमा करें - इसे ध्यान से पर्याप्त रूप से देखें नहीं। बेहतर जानकारी के साथ मेरा जवाब संपादित करने जा रहे हैं। –

1

मेरे लिए, सबसे अच्छा तरीका है प्रकार सुरक्षा चेतावनी से बचने के लिए के रूप में Matt Quail इस पोस्ट में कहते हैं: How to avoid type safety warnings with Hibernate HQL results?, एक कच्चे सहायक लेखन, लेकिन क्वेरी के बजाय मानदंड, इस तरह के साथ:

@SuppressWarnings("unchecked") 
public static <T> List<T> listAndCast(Criteria crit) { 
    List<T> list = crit.list(); 
    return list; 
} 

और केवल

List<MyClass> myClassList = listAndCast(crit); 

अभिवादन: आप इस विधि कॉल करने के लिए है!

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