2015-02-04 11 views
5

Ho ottenuto un programma che carica i dati grezzi per la creazione di grafici e li memorizza in una classe denominata cRawGraph .. Formatta quindi questi dati e li archivia in un'altra classe denominata cFormatGraph. Esiste un modo per copiare alcuni degli oggetti di data memorizzati in cRwGraph a data di oggetti memorizzati in cFormattedGraph senza utilizzare un riferimento? Ho esaminato la documentazione di Oracle e non ho visto un costruttore che avrebbe preso in un oggetto data o in alcun modo i dati avrebbero realizzato questo.Esiste un modo per copiare l'oggetto Date in un'altra data Object senza utilizzare un riferimento?

frammento di codice:

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

io non sono sicuro di quello che si sta chiedendo, ma è possibile utilizzare 'b = new Date (a.getTime())' o 'b = (Data) a.clone();' per clonare una data oggetto. BTW: il tuo codice di esempio in realtà non contiene la parola "Data". – eckes

risposta

15

Si potrebbe usare getTime() e passando alla data di costruzione (tempo). Questo è richiesto solo perché la data è modificabile.

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

Se stai usando Java 8 provare a utilizzare la nuova java.time API che usa immutable objects. Quindi non c'è bisogno di copiare/clonare.

+0

Ciao, grazie per l'answwer, potresti spiegare che cosa significa immutabile? –

+0

Immutable significa "non può essere modificato", ovvero la data è fissa, questo significa che puoi tranquillamente passare oggetti senza preoccuparti che il codice client modifichi il valore, e rimuova anche la necessità di clonare gli oggetti. – Adam

3

Se possibile, provare a passare a utilizzare Joda Time invece del tipo Data incorporato.

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

DateTime da Joda ha un costruttore di copia, ed è generalmente più bello di lavorare con poiché DateTime non è mutabile.

In caso contrario si potrebbe provare:

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

Java 8 non ha una propria versione di questa classe JodaTime, quindi non è più necessario utilizzare joda? –

+1

@DanielKaplan No, Joda-Time è vivo e vegeto. Mentre Joda-Time ha davvero ispirato il nuovo pacchetto java.time integrato in Java 8, ** java.time è stato re-architettato **. Quindi java.time non è un rimpiazzo per Joda-Time. Sia Joda-Time che java.time hanno punti di forza e presentano gli altri difetti. Entrambi sono progetti attivi in ​​corso. Non si escludono a vicenda; puoi usare entrambi in un progetto (fai attenzione alle importazioni dato che alcuni nomi di classe coincidono sempre). Il [minaccia-extra project] (http://www.threeten.org/threeten-extra/) estende java.time per aggiungere più funzionalità. –

1

Con Java 8 è possibile utilizzare il seguente codice nullsafe.

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

Funziona. Grazie Nicolas Henneaux –

Problemi correlati