Java static class / private method

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/java-static-class-private-method_246433/page_1 - zur Vollversion wechseln!


11Fire01 schrieb am 15.06.2016 um 03:09

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"?


SailorChibi schrieb am 15.06.2016 um 07:23

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


Denne schrieb am 15.06.2016 um 10:24

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 schrieb am 15.06.2016 um 13:00

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 schrieb am 15.06.2016 um 13:11

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.


SailorChibi schrieb am 15.06.2016 um 13:11

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


manalishi schrieb am 16.06.2016 um 18:20

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? :)




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025