![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Newbie
![]() Registriert seit: 24.09.2004
Beiträge: 3
|
![]() hi leute,
angenommen ich habe: public class A public class B extends A A a = ... (wobei alle Attribute von A und B über Getter & Setter Methoden les/schreibbar sind) und möchte nun ein Objekt der Klasse B erzeugen aus dem existenten Objekt a und dann noch zusätzliche Attribute setzen. was ich halt irgendwie umgehen möchte ist: B b = new B(); b.setX(a.getX()); b.setY(a.getY()); ... Also ich möchte im Prinzip machen: B b = a; (Das funktioniert ja nicht) b.set... (zusätzliche attribute) Kann ich das irgendwie machen ohne dabei über Reflection das Resultat aller getter Methoden von a durch die Setter Methoden von b zu setzen ? Ein clone oder ähnliches zu verwenden, gfallt ma nicht, da bei erweiterungen auch darin änderungen gemacht werden müssten. any ideas ? danke, oliva |
![]() |
![]() |
![]() |
#2 |
Inventar
![]() Registriert seit: 13.06.2001
Beiträge: 1.830
|
![]() So wie ich das verstehe hast du ein Objekt a der Klasse A und willst einem Objekt b der Klasse B die Eigenschaften von a zuweisen.
b=a wirft natürlich eine Exception. Du kannst aber einen Typecast machen: b=(B)a; Wenn ich deinen Post richtig verstanden habe, sollte es so funktionieren. Jak <edit>2 Tippfehler korrigiert</edit>
____________________________________
Join the DNRC | Godwin\'s Law (thx@stona) Documentation is like sex: If it\'s good, it\'s very, very good. If it\'s bad, it\'s better than nothing. \"In theory, theory and practice are the same. In practice, they are not\" (Lawrence Berra) |
![]() |
![]() |
![]() |
#3 |
Quantensingularität
![]() |
![]() Nein, ein Downcast ist nicht möglich. Kann auch gar nicht gehen, da die Kindklasse mehr Eigenschaften haben kann als die Mutterklasse.
Die einzige Möglichkeit ist jedes Feld entweder per Reflection oder per Hand aufs Kindobjekt zu übertragen.
____________________________________
Was ist klein, grün und dreieckig? Ein kleines grünes Dreieck! Bahnübergänge sind die härtesten Drogen der Welt! Ein Zug und du bist weg! |
![]() |
![]() |
![]() |
#4 |
Inventar
![]() Registriert seit: 13.06.2001
Beiträge: 1.830
|
![]() Ooops, stimmt natürlich.
Hab' anscheinend zu lange nicht mehr Java programmiert. Hab' das mit einem anderen Fall verwechselt (ich hatte eine Linked List aus A's die mit Objekten x1,x2,x3 der Klassen B,C,D gefüllt war; B,C,D waren Kinder von A und hab' daher D x4=(D)x3 machen können). Was du machen kannst ist, das du ein Objekt der Klasse B erzeugst und es in Methoden verwendest die Objekte der Klasse A erwarten: void setA(A myObj){ myObj.setusw... } Sollte man auch mit einem B füttern können (wenn ich nicht schon wieder Blödsinn red'). Jak
____________________________________
Join the DNRC | Godwin\'s Law (thx@stona) Documentation is like sex: If it\'s good, it\'s very, very good. If it\'s bad, it\'s better than nothing. \"In theory, theory and practice are the same. In practice, they are not\" (Lawrence Berra) |
![]() |
![]() |
![]() |
#5 |
Quantensingularität
![]() |
![]() Kinder haben ja gerade auch alle Eigenschaften der Mutterklasse und sind deswegen auch so verwendbar. Nur umgekehrt gehts halt nicht.
____________________________________
Was ist klein, grün und dreieckig? Ein kleines grünes Dreieck! Bahnübergänge sind die härtesten Drogen der Welt! Ein Zug und du bist weg! |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|