Richard: Object zu Integer / welches Programmdesign

Hallo,

ich habe eigentlich zwei verschiedene Fragen, weshalb ich gedacht habe, dass es vielleicht besser ist, auch zwei Threads aufzumachen. Aber ich wollte nicht dem Forumsgeist zum Opfer fallen und eine Woche warten bis ich die offizielle Erlaubnis habe, den nächsten Thread zu starten, deshalb pack ich jetzt beides hier rein.

Erstes Problem: ich habe in meinem Programm einen JDialog mit einem JSpinner, dessen Wert ich mit getValue() auslese, was ja den Typ Object zurückgibt. Ich brauche es aber als int. Und jetzt stehe ich völlig auf dem Schlauch. Folgendes Konstrukt kann doch nicht die einzig wahre Methode sein, von Object in int umzuwandeln:

Integer.parseInt( spinner.getValue().toString() )

Zweites Problem: ist eine Designfrage. Ich schreibe ein einfaches Zeichenprogramm. Man kann verschiedene Sachen einstellen (Farbe, Linienbreite, etc.), die dann in einem PaintModel gespeichert werden. Ein PaintModel wird einmal erzeugt und ist dann ein Member der Hauptklasse. Wenn nun beispielsweise der JDialog mit dem JSpinner (der zur Auswahl der Linienbreite dient) aufgerufen wird, übergebe ich dem Dialog im Konstruktor eine Referenz auf das PaintModel, damit aus diesem die aktuelle Linienbreite ausgelesen werden kann und die neue hineingeschrieben werden kann. Ist das so günstig? Oder gibt es da ein DesignPattern für, das das eleganter löst?

Grüße
Richard

  1. Hello,

    Integer.parseInt( spinner.getValue().toString() )

    Hast du mal nachgeschaut, ob der Inhalt von getValue zufällig schon ein Integer ist? Wenn ja, dann geht es etwas kürzer:
    ((Integer) spinner.getValue()).intValue()

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    Wenn du die Nadel im Heuhaufen nicht findest, zünde den Heuhaufen an.
    1. Hallo Rouven,

      Integer.parseInt( spinner.getValue().toString() )
      Hast du mal nachgeschaut, ob der Inhalt von getValue zufällig schon ein Integer ist? Wenn ja, dann geht es etwas kürzer:
      ((Integer) spinner.getValue()).intValue()

      Danke, das funktioniert. Mal eine dumme Frage: wozu ist eigentlich das intValue() gut, wenn es eh schon ein Integer ist? (es funktioniert nämlich auch ohne intValue() hintendran)

      Grüße
      Richard

      1. Hello,

        Danke, das funktioniert. Mal eine dumme Frage: wozu ist eigentlich das intValue() gut, wenn es eh schon ein Integer ist? (es funktioniert nämlich auch ohne intValue() hintendran)

        Java 6? Damit habe ich noch nicht viel bis eher gar nichts gemacht, kann sein, dass es da ein Autoboxing bzw. umgekehrt gibt.
        In Java 2 (1.4) ist es noch ein gewaltiger Unterschied, ob du vom primitiven int oder vom Objekt Integer sprichst.

        MfG
        Rouven

        --
        -------------------
        sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
        Let Bygones Be Bygones  --  Robert Pitscottie: "Chronicles of Scotland"
        1. Hallo Rouven,

          Java 6? Damit habe ich noch nicht viel bis eher gar nichts gemacht, kann sein, dass es da ein Autoboxing bzw. umgekehrt gibt.
          In Java 2 (1.4) ist es noch ein gewaltiger Unterschied, ob du vom primitiven int oder vom Objekt Integer sprichst.

          Nein, Java 5. Ich schreib es wohl sicherheitshalber einfach hin, danke soweit.

          Grüße
          Richard

          1. Hallo Richard,

            Nein, Java 5. Ich schreib es wohl sicherheitshalber einfach hin, danke soweit.

            Autoboxing gibt es seit Java 5, damit fügt der Compiler das das "intValue()" automatisch ein.
            Es ist aber trotzdem wichtig zu wissen, dass Objekte und native Datentypen etwas anderes sind, da bei der Umwandlung evtl. eine NullPointerException fliegen kann, wenn die Objekt-Referenz den Wert null hat.
            Bei deinem Spinner sollte das natürlich nicht auftreten.

            Grüße

            Daniel