2015-02-04 8 views
5

मैं एक प्रोग्राम है जो एक वर्ग cRawGraph बुलाया में चार्टिंग और यह स्टोर के लिए कच्चे डेटा में लोड करता मिल गया .. यह तो एक और वर्ग cFormatGraph कहा जाता है में इस डेटा और यह भंडार स्वरूपों। में संग्रहीत दिनांक वस्तुओं को प्रतिलिपि बनाने के लिए cFormattedGraph में संग्रहीत दिनांक वस्तुओं को कॉपी करने का कोई तरीका है? मैंने ओरेकल के दस्तावेज़ीकरण को देखा और एक ऐसा निर्माता नहीं देखा जो डेट ऑब्जेक्ट में ले जाएगा या किसी भी तरीके के डेटा को पूरा करेगा।क्या कोई ऑब्जेक्ट संदर्भ के बिना किसी अन्य दिनांक ऑब्जेक्ट में दिनांक ऑब्जेक्ट की प्रतिलिपि बनाने का कोई तरीका है?

कोड स्निपेट:

do{ 
     d=rawData.mDate[i].getDay(); 
     da=rawData.mDate[i]; 
     datept=i; 
     do{ 
      vol+=rawData.mVol[i]; 
      pt+=rawData.mPt[i]; 
      c++; 
      i++; 
      if (i>=rawData.getSize()) 
       break; 
      } while(d==rawData.mDate[i].getDay()); 

     // this IS NOT WORKING BECOUSE IT IS A REFRENCE AND RawData gets loaded with new dates, 
     // Thus chnaging the value in mDate 
     mDate[ii]=da; 

     mVol[ii]=vol; 
     mPt[ii]=pt/c; 
     if (first) 
     { 
      smallest=biggest=pt/c; 
      first=false; 
     } 
     else 
     { 
      double temp=pt/c; 
      if (temp<smallest) 
       smallest=temp; 
      if (temp>biggest) 
       biggest=temp; 

     } 
     ii++; 
    } while(i<rawData.getSize()); 
+0

मुझे यकीन है कि तुम क्या कह रहे हैं नहीं कर रहा हूँ, लेकिन आप 'उपयोग कर सकते हैं ख = new Date (a.getTime())' या 'ख = (तिथि) a.clone();' एक तारीख क्लोन करने के लिए वस्तु। बीटीडब्ल्यू: आपके नमूना कोड में वास्तव में "दिनांक" शब्द नहीं होता है। – eckes

उत्तर

15

आप getTime() है और यह तिथि में गुजर (समय) निर्माता इस्तेमाल कर सकते हैं। यह केवल इसलिए आवश्यक है क्योंकि तिथि उत्परिवर्तनीय है।

Date original = new Date(); 
Date copy = new Date(original.getTime()); 

आप उपयोग कर रहे हैं जावा 8 नए java.time API जो immutable objects का उपयोग करता है का उपयोग करें। तो कॉपी/क्लोन करने की कोई ज़रूरत नहीं है।

+0

हाय, उत्तर देने के लिए धन्यवाद क्या आप अपरिवर्तनीय साधनों को समझा सकते हैं? –

+0

अपरिवर्तनीय साधन "बदला नहीं जा सकता" यानी दिनांक तय किया गया है, इसका मतलब है कि आप मूल्य को बदलने वाले क्लाइंट कोड के बारे में चिंता किए बिना ऑब्जेक्ट सुरक्षित रूप से पास कर सकते हैं, और ऑब्जेक्ट क्लोन करने की आवश्यकता को भी हटा सकते हैं। – Adam

3

यदि संभव हो, तो निर्मित दिनांक प्रकार के बजाय जोडा समय का उपयोग करने के लिए स्विच करने का प्रयास करें।

http://www.joda.org/joda-time/

Joda से

दिनांक समय एक प्रति निर्माता है, और आम तौर पर साथ के बाद से दिनांक समय परिवर्तनशील नहीं है काम करने के लिए अच्छे है।

नहीं तो आप की कोशिश कर सकते:

Date newDate = new Date(oldDate.getTime()); 
+1

क्या जावा 8 इस जोडाटाइम क्लास के अपने संस्करण के साथ नहीं आया है, तो अब आपको जोडा का उपयोग करने की आवश्यकता नहीं है? –

+1

@DanielKaplan नहीं, जोडा-टाइम जीवित और अच्छी तरह से है। जबकि जोडा-टाइम ने वास्तव में जावा 8 में बनाए गए नए जावा.टाइम पैकेज को प्रेरित किया, ** जावा.टाइम को फिर से आर्किटेक्टेड किया गया था **। तो जावा-टाइम जोडा-टाइम के लिए ड्रॉप-इन प्रतिस्थापन नहीं है। जोडा-टाइम और जावा.टाइम दोनों में ताकत है और अन्य कमीएं हैं। दोनों सक्रिय सक्रिय परियोजनाएं हैं। वे पारस्परिक रूप से विशिष्ट नहीं हैं; आप एक परियोजना में दोनों का उपयोग कर सकते हैं (केवल आयात के साथ सावधान रहें क्योंकि कुछ वर्ग नाम संयोग से समान हैं)। [धमकी-अतिरिक्त परियोजना] (http://www.threeten.org/threeten-extra/) अधिक सुविधाओं को जोड़ने के लिए जावा.टाइम बढ़ाती है। –

1

साथ जावा 8 आप निम्नलिखित nullsafe कोड का उपयोग कर सकते हैं।

Optional.ofNullable(oldDate) 
       .map(Date::getTime) 
       .map(Date::new) 
       .orElse(null) 
+0

यह काम करता है। धन्यवाद निकोलस हेनॉक्स –

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

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