2012-07-02 10 views
6

मैं जावा से एक MongoDB उदाहरण है कि एक रेल App से करने के लिए लिखा है तक पहुँचने कर रहा हूँ में MongoDB से पूर्णांक क्षेत्र पढ़ने। मैं पूर्णांक मानों को पुनर्प्राप्त कर रहा हूं जिन्हें लंबे समय तक संग्रहित किया जाना चाहिए, क्योंकि वे 32 बिट्स से अधिक हो सकते हैं।लांग प्रकार डाली त्रुटि जावा

इस कोड को संकलित कर देगा:

this.profile_uid = (Long)this.profile.get("uid"); 

हालांकि, मैं एक प्रकार रूपांतरण रन-टाइम त्रुटि हो रही है:

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long 

यह शायद क्योंकि क्षेत्र मोंगो द्वारा पूर्णांक के रूप में दिया जाता है है, लेकिन मुझे पता है कि कुछ आईडी लंबे समय तक आ सकती हैं और विभिन्न कारणों से मैं डीबी (दूसरे ऐप से) टाइप किए गए प्रकार को नहीं बदल सकता; यह कुछ मामलों में 32-बिट और दूसरों में 64-बिट हो सकता है।

जावा अनुप्रयोग या तो संभाल करने की जरूरत है, और मैं काट-छांट या अतिप्रवाह मुद्दे के कुछ प्रकार में चलाने के लिए नहीं करना चाहती। मैं जावा पक्ष पर लांग के रूप में इसे पढ़ना चाहता हूं।

मैं नीचे वैकल्पिक हल की कोशिश की है और इसे चलाने के लिए लगता है, लेकिन मैं नहीं जानता कि अगर मैं काट-छांट या अतिप्रवाह मुद्दों इस तरह से सुरक्षित है। मुझे यकीन नहीं है कि जावा में Number कक्षा क्या है।

this.profile_uid = ((Number)this.profile.get("uid")).longValue(); 

इस कानूनी है? इसका क्या दुष्प्रभाव है? क्या कोई और बेहतर तरीका है?

+1

आप दिए गए मान का उपयोग कर ** instaceof ** के प्रकार की जांच कर सकते हैं और फिर typecasting –

उत्तर

5

आपका सुझाया गया कार्यवाही वैध है। Number जावा में सभी संख्या वर्गों की सुपर-क्लास है। बशर्ते कि आपके "uid" क्षेत्र एक नंबर प्रारूप में है, this.profile.get("uid")) एक वस्तु जो Number के कुछ उप-वर्ग है (और इसलिए Number लिए डाली हमेशा कार्य करेंगे) वापस आ जाएगी। Number की

सभी ठोस उप-वर्गों, longValue() विधि को लागू करना चाहिए, क्योंकि यह Number कक्षा में एक सार विधि के रूप में परिभाषित किया गया है।

Integer.longValue() एक लंबे को अपने आंतरिक पूर्णांक मूल्य बदल देता है। Long.longValue() बस अपने आंतरिक लंबे मूल्य को लौटाता है।

+0

धन्यवाद एक बहुत के लिए तदनुसार निर्णय ले। यही वही है जो मुझे जानने की जरूरत है। –

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