"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Java static class / private method

11Fire01 15.06.2016 - 03:09 1779 6
Posts

11Fire01

Here to stay
Registered: Dec 2002
Location: austria
Posts: 2417
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

Code: JAVA
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

Code: JAVA
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
Avatar
Registered: Aug 2010
Location: Wien
Posts: 382
Ich hoffe mal ich hab deine Fragen richtig verstanden..

Zitat
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.


Zitat
Und wieso kann man, wie in 1. das Objekt erstellen und nach dem "=" direkt die Methode aufrufen anstatt von "new Ray"?

Die aufgerufene Methode
Code: JAVA
Ray convertNormalized2DPointToRay(...)
gibt ja einen Ray zurück und dieser wird auf
Code: JAVA
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
Avatar
Registered: Jan 2005
Location: Germany
Posts: 2801
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
Registered: Dec 2002
Location: austria
Posts: 2417
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
Avatar
Registered: Sep 2002
Location: .
Posts: 1231
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
Avatar
Registered: Aug 2010
Location: Wien
Posts: 382
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.

Code: CSHARP
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
Avatar
Registered: Feb 2001
Location: Feldkirch
Posts: 5977
Zitat von PuhBär
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? :)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz