Java static class / private method
11Fire01 15.06.2016 - 03:09 1779 6
11Fire01
Here to stay
|
ich habe hier ein opengl projekt in dem java für android verwendet wird und da gibt es in diesem beispiel folgendes: 1. Die Zeile die alles aufruft: Ray ray = convertNormalized2DPointToRay(normalizedX,normalizedY); 2. ray class mit constructor public static class Ray {
public final Point point;
public final Vector vector;
public Ray(Point point, Vector vector) {
this.point = point;
this.vector = vector;
}
}
3. die private methode direkt mit dem namen der klasse private Ray convertNormalized2DPointToRay(float normalizedX, float normalizedY) {
.
.
.
return new Ray(nearPointRay, Geometry.vectorBetween(nearPointRay, farPointRay));
}
Wie nennt man so ein Konstrukt wie in 3 und warum kann man das so schreiben? Und wieso kann man, wie in 1. das Objekt erstellen und nach dem "=" direkt die Methode aufrufen anstatt von "new Ray"?
Bearbeitet von JC am 15.06.2016, 08:17 (code tags)
|
SailorChibi
Addicted
|
Ich hoffe mal ich hab deine Fragen richtig verstanden.. Wie nennt man so ein Konstrukt wie in 3 und warum kann man das so schreiben? Sorry, aber was für ein Konstrukt meinst du genau? Ich seh hier absolut nichts aussergewöhnliches. Das ist eine normale Methode die einen neuen Ray retourniert. Und wieso kann man, wie in 1. das Objekt erstellen und nach dem "=" direkt die Methode aufrufen anstatt von "new Ray"? Die aufgerufene Methode Ray convertNormalized2DPointToRay(...)
gibt ja einen Ray zurück und dieser wird auf Ray ray
zugewiesen. Warum sollte das nicht gehen? ray ist ja nur ein Platzhalter der leer sein kann oder einen Ray zugewiesen hat. Woher dieser Ray kommt ist ray komplett egal. In diesem Fall kommt der Ray halt aus einer Methode
Bearbeitet von JC am 15.06.2016, 08:17 (code tags)
|
Denne
Here to stay
|
Wegen 3: Die Methode gibt dir ja new Ray(nearPointRay, Geometry.vectorBetween(nearPointRay, farPointRay)) zurück, was dann der Variable ray zugewiesen wird. Heißt die Objekterstellung wurde nur in eine Methode ausgelagert
|
11Fire01
Here to stay
|
ok, das kann man so auch machen scheinbar. bisschen ungewöhnlich für mich. mit konstrukt(aufbau) meinte ich nur die art des objektaufrufes mit all dem darunter.
funktioniert so etwas nur in java?
|
PuhBär
Schau ned so genau
|
Das Konzept - bzw. wie du sagst Aufbau - dahinter nennt man Reference Counted Smart Pointer. Es wird mit "new" das Objekt einmal im Speicher erstellt, kopiert wird dann allerdings nicht mehr das ganze Objekt, sondern eben nur ein Helfer (Wrapper) drumherum, der die Anzahl der Referenzen auf das Objekt zählt, und weiß wie es wieder aus dem Speicher entfernt wird.
Zumindest in C++/C# gibt es das auch; wahrscheinlich in den meisten OO Languages.
Bearbeitet von PuhBär am 15.06.2016, 13:12
|
SailorChibi
Addicted
|
Das kannst du in jeder OOP machen und ist auch gängig. In C# erstell ich z.B.: regelmäßig ViewModels (enthalten Daten welche am Frontend angezeigt werden) was dann in etwa so aussieht. public JsonResult Index(long offerId)
{
Offer offer = Session.Load<Offer>(offerId); //Laden des Angebotes aus der Datenbank
OfferViewModel offerViewModel = CreateOfferViewModel(offer)
return offerViewModel.ToJson();
}
private OfferViewModel CreateOfferViewModel(Offer offer)
{
OfferViewModel viewModel = new OfferViewModel();
viewModel.NetSum = offer.NetSum;
//Weiteres befüllen der Daten
return viewModel;
}
Damit kann ich meine Methode Index klein und knackig halten und wenn mich wirklich interessiert wie das VIewModel entsteht schau ich halt rein
Bearbeitet von JC am 19.07.2019, 09:57 (cs tags)
|
manalishi
tl;dr
|
Das Konzept - bzw. wie du sagst Aufbau - dahinter nennt man Reference Counted Smart Pointer. Es wird mit "new" das Objekt einmal im Speicher erstellt, kopiert wird dann allerdings nicht mehr das ganze Objekt, sondern eben nur ein Helfer (Wrapper) drumherum, der die Anzahl der Referenzen auf das Objekt zählt, und weiß wie es wieder aus dem Speicher entfernt wird.
Zumindest in C++/C# gibt es das auch; wahrscheinlich in den meisten OO Languages. Reference und WeakReference?
|