Primitive Objekte und referenzen



  • Sollte es nicht so sein das ich zu jeden Primitiven typ ne klasse habe die vom Typ Object ist? Ok das scheint auch so. Aber ist es nicht eigentlich so das alle klassen die an funktionen übergeben werden per reference übergeben werden?
    Das scheint nämlich nicht so zu sein.

    ich habe folgendes Beispiel:

    void foo(Object o)
    {
        Integer mi = 4;
        o = mi;
    }
    

    ok so einfach ists nicht ganz aber prinzipell, das problem nach draussen ist o nun nicht 4 aber genau das brauch ich. Wie krieg ich sowas hin? Irgendwie steh ich gerade total auf den schlauch, liegt wohl auch am zuvielen programmieren.

    Achso natürlich rufe ich das so auf

    Integer i=0;
    foo(i);



  • Java kennt ausschliesslich "call by value", was du aber machen kannst:

    class Ref<A>{
      public A a;
    }
    
    ...
    
    void foo( Ref<Integer> ref ){
      Integer mi = 4;
      ref.a = mi;
    }
    
    ...
    
    Ref<Integer> iref = new Ref<Integer>();
    foo( iref );
    Integer mi = iref.a;
    


  • Das hättest du in C++ aber eleganter lösen können.



  • du schrieb:

    Das hättest du in C++ aber eleganter lösen können.

    Warum hör ich da nen beginnenden Flamewar heraus?
    Dafür kann man mit call by ref auch viel unsinn anstellen. Java war dafür gedacht möglichst stabil zu sein ohne viel mist bauen zu können. Man hat also die meisten Fehlerquellen schlicht und einfach weg gelassen. Das dadurch manches etwas umständlicher wurde ok. Aber dafür krieg ich ein Java programm so gut wie nie zum segfaulten. Ausserdem Brauch ich um ne datenbankanbindung zu schaffen in java knapp 3 Zeilen code. Wieviel brauchts in C++ ? Das gleiche gilt für Multithreading. Das ist in Java extrem einfach gelöst. Ich will jetzt hier nicht den Java Vergötterer spielen, ich programiere selber viel lieber in C++ aber wie immer gibts im leben für alles eine berechtigung. Und ich würde schon aufgrund der plattformunabhängigkeit für jegliche Betriebswirtschaftlichen Anwendungen wo es nicht auf Grafikperformance ankommt sondern auf die Kosten extrem geachtet werden müssen ausschließlich auf java zurück greifen.

    Zum eigentlichen Thema.:

    Schade das es nichts einfacheres gibt, hab es aber nun auch über so eine Holder klasse gelöst. Ist nicht wirklich schön aber wohl das einzige wirklich sinnvolle.
    Thx, Heiko.



  • Wieso gehst du auf "du" überhaupt ein?



  • Fedaykin schrieb:

    Schade das es nichts einfacheres gibt, hab es aber nun auch über so eine Holder klasse gelöst. Ist nicht wirklich schön aber wohl das einzige wirklich sinnvolle.
    Thx, Heiko.

    ne die einzig wirkliche sinnvolle möglichkeit wär:

    Object foo();
    Object o = foo();



  • Fedaykin schrieb:

    Dafür kann man mit call by ref auch viel unsinn anstellen

    Da Du das ja schon begriffen hast, verstehe ich Dein Problem gar nicht. Denn offenbar willst Du ja genau eben diesen seiteneffektbehafteten Programmierstil benutzen, den Call by Reference erst möglich macht.


Anmelden zum Antworten