Java Array Werte "manuell" an Objekt bzw. Konstruktor übergeben

Vulpecula

Commander
Registriert
Nov. 2007
Beiträge
2.241
Hallo!

Ich möchte ein Objekt erstellen und dessen Konstruktor nimmt zwei Arrays entgegen. Bisher habe ich folgendes dort stehen:

Code:
Objekt obj1 = new Objekt(null, null);

Kann ich die beiden "null" jetzt so ersetzen, dass ich quasi "manuell" dort die Werte eintrage, die das Array im Konstruktor dann wegspeichern soll? Also so in der Art {x,y,z}? Ich möchte die Werte ungern in der Main schon vorher festzurren müssen und diese gerne direkt in der Objekterstellung haben.

MfG - V
Ergänzung ()

Ich weiß, dass ich die Werte zwar auch einzeln übergeben kann, aber dann hätte ich im Konstruktor des Objektes sowas stehen wie

Code:
arrayname[1] = ersterÜbergebenerWert
arrayname[2] = zweiterÜbergebenerWert
arrayname[3] = dritterÜbergebenerWert

Das wäre nur eine Notlösung, denn falls es irgendwie geht möchte ich auch das vermeiden.
 
Zuletzt bearbeitet:
nimm eine Arraylist - sie ist variable, ansonsten mußt du immer mit einer festen breite des array's arbeiten

=>
Code:
class DeinObjekt {

     DeinObjekt(ArrayList<Typ> Liste1, ArrayList<Typ> liste2){
                  /*machedamit was du wilst*/
     }
}
 
Code:
Objekt obj1 = new Objekt( new ArrType[]{ elem1, elem2, ... }, ... );

Wenn elem1 auch ein Objekt wäre dann eben entsprechend durch new Typ( ) ersetzen.

@sparvar: Nope, geht auch so.
 
Zuletzt bearbeitet:
Oh, die Größe des Arrays ist nicht ausschlaggebend. Es sind zwei Arrays mit je vier Werten und das wird sich auch nicht ändern.
 
Es geht so wie ich geschrieben habe. Wenn du Arrays nutzen willst und keine Collection, dann so.
Außerdem lassen sich Arrays als Parameter in Java nicht in der Größe begrenzen.
 
Vielen Dank! Ich war sogar schon auf der richtigen Spur, denn so ähnlich hatte ich es schon. Ich hatte aber "Double" anstelle von "double" geschrieben...

Ich geb ne Runde Facepalm aus... :freak:
 
nimm trotzdem eine arrayliste :)


ansonten sieht halt deine klasse so aus:

Code:
String[] arrayname= new String[4];
String[] arrayname2 = new String[4];
public Irgendwas(String[] arrayname, String[] arrayname2) {
}
 
Das sollte aber auch kein Problem darstellen, die Konvertierung double <-> Double geht ab Java 7(?) implizit.
 
Kann sein, dass es impliziert zugelassen wird, aber Eclipse lässt das nicht durch ;)

@flintzen: Ich fange gerade erst an, mich mit Objektorientierung zu beschäftigen, ich lass es lieber langsam angehen. Aber danke. ;)

BTW: Ich hab noch ein Problem mit Exceptions... Und zwar prüfe ich in eine extra Methode (die aus dem Konstruktor heraus aufgerufen wird), ob die vier Werte des einen Arrays zusammengerechnet 360 ergeben. Tun sie das nicht, dann soll eine Exception abgefangen und eine Fehlermeldung ausgegeben werden. Das Programm soll aber weiterlaufen - lediglich die Erstellung des Objekts soll "abgebrochen" werden. Kann mir jemand erklären, wie eine Exception aussehen muss?
 
Zuletzt bearbeitet:
Vulpecula schrieb:
[...] Tun sie das nicht, dann soll eine Exception abgefangen und eine Fehlermeldung ausgegeben werden. Das Programm soll aber weiterlaufen - lediglich die Erstellung des Objekts soll "abgebrochen" werden. Kann mir jemand erklären, wie eine Exception aussehen muss?

Du packst die Objekterstellung eben in einen try-catch-block und reagierst im catch-block auf die Exception, wie du es für nötig betrachtest.
 
Okay, das bekomme ich hin. Nur muss ich nicht einen bestimmten Typ von Exception angeben, der aufgefangen werden soll?
Ergänzung ()

Ah, ich habs, dankesehr! :)
 
Zuletzt bearbeitet:
Ein Array oder sogar mehrere als Parameter zur Konstruktion eines Objekts zu übergeben, sieht für mich sehr fraglich aus. WENN man sowas macht, sollte man unbedingt ein paar Dinge beachten.

Also erstmal nebenbei - wäre es nur ein Array, könntest du einen varargs-Parameter verwenden. Da aber nur einer pro Signatur erlaubt ist, geht das per Konstruktor zumindest nicht.
Ein guter workaround, wenn man mehrere varargs-Parameter braucht, ist das Builder-Pattern. Dazu würde ich dir in dem geschilderten Fall hier ohnehin raten, denn es passt hier wie Arsch auf Eimer. Der Builder braucht nur 2 Methoden, die jeweils einein varargs-Parameter haben. Dann kannst du entweder direkt in diesen 2 Methoden prüfen, ob deine 360 erreicht sind, oder spätestens in der build()-Methode. Ist das nicht der Fall, wirfst du eine IllegalStateException, die du dann entsprechend fängst und behandelst (User-Feedback oder was auch immer).

WENN du bei deinem Herangehen bleibst (ich kann nur davon abraten), dann bitte darauf achten, dass zu den hereingegebenen Arrays keine Referenz mehr von außen besteht, sonst kann das Objekt unkontrolliert manipuliert werden, es sei denn, du machst "defensive copies" der Arrays bzw. speicherst wirklich direkt die ints, die darin stehen, denn diese sind zumindest in der ungeboxten Version unveränderbar.

Das mag dir vielleicht größtenteils spanisch vorkommen, aber achte besser von Anfang an auf solche Dinge und belies dich mal zu diesen Stichwörtern. Wichtige Lektüre dazu ist Effective Java. Da wird das Builder-Pattern gleich im ersten Kapitel erläutert. Die defensive Programmierung (meine ich mich zu erinnern) weiter hinten.

P.S.: bei Collections kann man auch wesentlich leichter eine "unmodifiable" Version erzeugen, die sicher ist.
 
Zuletzt bearbeitet:
Die Werte aus den Arrays werden im Prinzip nur einmal übergeben. Sofern sie gespeichert werden müssten, hätte ich mir eh irgendwas anderes einfallen lassen müssen; ich weiß dass das so nicht sauber ist. Ich habe es aus jetzt aus dem Grund so gemacht, dass meine Konstruktoren nicht so dermaßen aus dem Ruder laufen (ist so eine sinnfreie Deep-Inheritance Übung...) . Wenn ich ein wenig mehr Lust auf diese Übung hätte, würde ich das ganze eh anders angehen.
 
Zurück
Oben