2013-03-06 5 views
8

डेटास्टोर सेवा के साथ इस कोड का उपयोग करते समय मुझे क्लासकास्टएक्सप्शन लॉन्ग एन्नोट को एंटीटी से पूर्णांक में डाला जा सकता है। क्या यह सामान्य व्यवहार है?कॉलिंग सेट int के साथ प्रॉपर्टी लेकिन getProperty रिटर्न Google ऐप इंजन पर लगातार स्टोरेज

try 
{ 
    ret._integerval = (Integer)ent.getProperty("property1"); 
} 
catch(ClassCastException ex) { 
    Long val = (Long)ent.getProperty("property1"); 
    ret._integerval = val.intValue(); 
} 

या हो सकता है सभी संख्यात्मक मान के रूप में जमा हो जाती है:

class UserData { 
    private int _integerval = 0; 
    private String _stringval = ""; 
    public Entity getEntity() { 
     Entity ret = new Entity("User", key); 
     ret.setProperty("property1", _integerval); 
     ret.setProperty("property2", _stringval); 
     return ret; 
    } 

    public static UserData fromEntity(Entity ent) { 
     UserData ret = new UserData(); 
     ret._integerval = (Integer)ent.getProperty("property1"); 
     ret._stringval = (String)ent.getProperty("property2"); 
     return ret; 
    } 
} 

मैं हमेशा इस तरह इस अपवाद को पकड़ने के लिए है (मैं जब ग्रहण के लिए गूगल प्लगइन के साथ स्थानीय कंप्यूटर पर डिबगिंग इस व्यवहार मिलता है) सिर्फ लंबा? क्या इस उत्सर्जन से बचने के लिए मुझे _integerval प्रकार को लंबे समय तक बदलना है?

उत्तर

5

कास्टिंग करते समय Integer के बजाय int का उपयोग करें।

ret._integerval = (int)ent.getProperty("property1"); 

संपादित करें:

निम्नलिखित setProperty एपीआई में शामिल है।

चूंकि डेटा डेटास्टोर में संग्रहीत किया जाता है, इसे डेटास्टोर के मूल प्रकार में परिवर्तित कर दिया जाता है। इसमें चौड़ाई शामिल हो सकती है, जैसे को शॉर्ट टू लांग में परिवर्तित करना।

तो अपने पूर्णांक डेटा Long रूप डेटासंग्रह के मूल प्रकार में बदला जा रहा है। long या Long का उपयोग करके कास्ट करें।

+0

ही। Java.lang.ClassCastException प्राप्त करें: java.lang.Long java.lang.Integer पर नहीं डाला जा सकता है। – Dmitry

6

एक नया पूर्णांक बनाएँ:

Integer property = new Integer(entity.getProperty("propertyKey").toString()); 
0

पूर्णांक मान लांग के रूप में सहेजा जाता है, ताकि एप्लिकेशन इंजन हमेशा लांग वापस आ जाएगी, मैं अपने आप उलझन में था, लेकिन उसके बाद मैं this

1

देखा आप int उपयोग करना चाहते हैं अपने programm में तो यह ठीक काम करता है:

int i = (int) (long) entity.getProperty(propertyName); 

फिर भी लगता है कि संख्या पूर्णांक दूरी में हो जाता है हो सकता है (चर्चा की here)।

1

रूप official documentation

में रिपोर्ट मूल्य डेटासंग्रह में संग्रहीत किया जाता है, यह डेटासंग्रह के मूल प्रकार में बदल जाती है। इसमें चौड़ाई शामिल हो सकती है, जैसे को शॉर्ट टू लांग में परिवर्तित करना।

तो

  • पूर्णांक के रूप में सेट, लेकिन क्योंकि किसी कारण स्थानीय वातावरण में डेटासंग्रह व्यवहार अलग है और यह भी पूर्णांक संग्रहीत करता है के लिए लंबे समय के लिए यह डाली।
  • लंबा और उपयोग करें।intValue()

    public int get() { 
        return ((Long) entity.getProperty(FIELD)).intValue(); 
    } 
    
    public void set(int value) { 
        entity.setProperty(FIELD, (long)value); 
    }