Vererbung werte von einem Objekt aus ein anderes übertragen

rima

Mitglied
Hallo,
ich hab eine grundlegende Frage die ich nirgends beantwortet bekomme.

Ich habe eine Klasse in der sehr viele Variablen deklariert sind. Aus dieser klasse wird ein Objekt "aktuelle_werte" erzeugt, dieses wird ständig verändert und ausgelesen.
Zusätzlich habe ich noch zwei Objekte "min_werte" und "max_werte".
Nun vergleiche ich ständig die Aktuellen werte mit den min und maxwerten und schreibe diese bei neune Extremwerten in die jeweiligen min und maxwerte. Dies muss ich eh für jeden wert einzeln machen.
Wenn ich die werte aber wieder zurücksetzten will dachte ich, ich mach einfach "max_werte = aktuelle_werte" und "min_werte = aktuelle_werte". Leider biege ich hiermit den Zeiger um und ich habe keine einzelnen Objekte mehr.
Gibt es irgendeine Möglichkeit diese Werte in Summe zu übertragen oder muss ich das alles einzeln machen?
Ich hab schon was von clonen oder so gelesen, aber dann würde ich ja ständig zusätzliche Objekte generieren.
 
die werte aber wieder zurücksetzten
Wenn du eine Instanz der Klasse erzeugst, dann weist du ja den Attributen die Werte zu.
Wenn es so ist, dann empfehlt sich doch eine finale Variable des jeweiligen Typen und wenn du das Attribut wieder im Ursprung sehen willst, dann weise doch den Attribut die Variable nochmal zu.

So nach dem Motto:
Java:
public class Clazz{
    private final int value = 100;

    private int x;
    public Clazz()
    {
           x = value;
    }

    public void resetX()
    {
        x = value;
    }
}
 
Für solche generischen "über alle Felder/Methoden" Sachen eignet sich mMn Reflection ganz gut. Z.B. kannst du mit folgender Methode alle Feldwerte von src nach dst kopieren/übernehmen (falls du sonst keine weitere Qualifizierung der zu übernehmenden Felder benötigst):
Java:
public static <T> void copyValues(T src, T dst) {
  Class<?> clazz = src.getClass();
  for (java.lang.reflect.Field f : clazz.getDeclaredFields()) {
    f.setAccessible(true);
    try {
      f.set(dst, f.get(src));
    } catch (Exception e) {
      throw new RuntimeException(
          "Could not set field [" + f.getName() + "] from src=[" + src + "] to dst=[" + dst + "]");
    }
  }
}
Der obige Code funktioniert nicht für Klassenhierarchien. Aber da kannst du dich etwas in die Reflection API einlesen und schauen, wie das geht.
 
Ich hab schon was von clonen oder so gelesen, aber dann würde ich ja ständig zusätzliche Objekte generieren.
Klar, aber das alte Objekt wird vom Garbage Collector eingesammelt. Mach dir über solche Sachen keine Gedanken, außer du hast eine sicherheitskritische real-time Anwendung.
Klonen ist der way-to-go.

Bean Mapper sind meistens notwendig wenn man verschiedene Domain Beans (DB <-> BusinessLayer) mappen möchte.
 
Hallo,
Danke für die Hinweisse.
Ich hab mich jetzt trotzdem dazu entschieden die ca. 50 Werte einzen zu kopieren. Das ist für mich anfänger einfach übersichtlicher.
 
@rima
Ich denke, wenn du mehr von deinem Werk preisgeben würdest, würdest du auch bessere Ratschläge bekommen.
So richtig komme ich nicht drauf, was du da machst..
 

Neue Themen


Zurück
Oben