2015-02-04 11 views
5

Ich habe ein Programm, das in Rohdaten für Diagramme lädt und speichert es in einer Klasse namens cRawGraph. Es formatiert dann diese Daten und speichert es in einer anderen Klasse namens cFormatGraph. Gibt es eine Möglichkeit, einige der in cRwGraph gespeicherten Datumsobjekte in cFormattedGraph gespeicherte Datumsobjekte zu kopieren, ohne eine Referenz zu verwenden? Ich schaute auf die Dokumentation von Oracle und sah keinen Konstruktor, der ein Datumsobjekt oder irgendwelche Methodendaten aufnehmen würde, um dies zu erreichen.Gibt es eine Möglichkeit, Date-Objekt in ein anderes Date-Objekt zu kopieren, ohne eine Referenz zu verwenden?

Code-Schnipsel:

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

Ich bin nicht sicher, was Sie fordern, aber Sie können 'verwenden b = new Date (a.getTime())' oder 'b = (Datum) a.clone();' ein Datum zu klonen Objekt. Übrigens: Ihr Beispielcode enthält nicht das Wort "Datum". – eckes

Antwort

15

könnten Sie verwenden getTime() und in das Datum (Zeit) Konstruktor. Dies ist nur erforderlich, da Date änderbar ist.

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

Wenn Sie mit Java 8 versuchen, die neuen java.time API verwendet, die immutable objects verwendet. Also keine Notwendigkeit zu kopieren/klonen.

+0

Hallo, vielen Dank für die Antwort können Sie erklären, was unveränderlich bedeutet? –

+0

Unveränderlich bedeutet "kann nicht geändert werden", dh das Datum ist fest, das bedeutet, dass Sie Objekte problemlos übergeben können, ohne sich Gedanken darüber machen zu müssen, dass der Clientcode den Wert ändert. Außerdem müssen Objekte nicht mehr geklont werden. – Adam

3

Wenn möglich, versuchen Sie, Joda Time statt des eingebauten Datums zu verwenden.

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

Datetime von Joda hat einen Copy-Konstruktor, und ist in der Regel schöner mit zu arbeiten, da Datetime nicht wandelbar ist.

Andernfalls könnten Sie versuchen:

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

Ist Java 8 nicht mit einer eigenen Version dieser JodaTime-Klasse ausgestattet, sodass Sie joda nicht mehr verwenden müssen? –

+1

@DanielKaplan Nein, Joda-Time ist am Leben und gesund. Während Joda-Time in der Tat das neue Paket java.time in Java 8 inspiriert hat, wurde ** java.time neu gestaltet **. Daher ist java.time kein Ersatz für Joda-Time. Sowohl Joda-Time als auch java.time haben Stärken und Features. Beide sind laufende aktive Projekte. Sie schließen sich nicht gegenseitig aus; Sie können beide in einem Projekt verwenden (seien Sie vorsichtig mit Importen, da einige Klassennamen zufällig identisch sind). Das [Threate-Extra-Projekt] (http://www.threeten.org/threeten-extra/) erweitert java.time, um weitere Funktionen hinzuzufügen. –

1

Mit Java 8 Sie den folgenden Code Nullsafe verwenden können.

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

Es funktioniert. Danke Nicolas Henneaux –

Verwandte Themen