Java: Viele Objektvariable (statisch)

8

Ich bin neu in der objektorientierten Programmierung und habe das folgende Problem.

(Beachten Sie, dass diese Lösung ein Teil ist meines Problems)

Ich brauche eine Variable, auf die sich viele Objekte beziehen können, aber für jedes Objekt einige "private" Informationen aufbewahren. Um genauer zu sein, habe ich eine Klasse namens Worker erstellt und möchte, dass jedes Objekt dieser Klasse eine eindeutige ID vom Typ int hat. Also, erstes Objekt hat ID=1 , zweites ID=2 etc ... Beachten Sie, dass ich nicht nur eine zufällige Ganzzahl will, während ich anfangen muss, von 0 zu zählen und zu erhöhen ...

Deklaration und Initialisierung der Variablen in der Klasse

%Vor%

und ich habe versucht, die Incrementation zu implementieren, indem ich diese Codezeile in den Konstruktor-Body

hinzufüge %Vor%

Ich instanziiere einige Objekte, füge sie zu ArrayList hinzu und benutze eine for-Schleife, um die Variablen jedes Objekts zu drucken.

%Vor%

und getWorkerId() (Klassenmethode) besteht aus

%Vor%

Problem ist, dass mein Programm nicht jedes eindeutige workID (weil es nicht gibt), sondern den letzten Wert der statischen Variable (was zufällig die Anzahl der Objekte ist) druckt.

Können Sie eine Lösung für mein Problem beschreiben?

    
quelle

2 Antworten

7

Kommentar hat geantwortet:

Sie sind auf dem richtigen Weg.

Derzeit wird Ihr statisches Mitglied mit jedem von Ihnen erstellten Mitarbeiter erhöht. Dies bedeutet, dass es keine ID eines Arbeiters enthält (dies kann nicht der Fall sein, da eine statische Variable zu der Klasse anstelle einzelner Instanzen gehört), stattdessen enthält sie die Gesamtzahl der bisher von Ihnen erstellten Worker .

Korrektur

  • Benennen Sie Ihr statisches Mitglied in etwas wie numWorkers um, damit es wiedergibt, was es tut
  • Stellen Sie ein anderes (nicht statisches) Mitglied vor, id (oder workerId , wenn Sie bevorzugen)
  • Ändern workId++ in id = ++numWorkers

Warum?

Nun hat jeder Arbeiter sein eigenes id . Sie ordnen es zu, indem Sie die aktuelle Anzahl der erstellten Worker ( numWorkers ) betrachten, diesen Wert um eins erhöhen und dann id zuweisen. Auf diese Weise wird die ID Ihres ersten Mitarbeiters 1 , die zweite lautet 2 und so weiter. numWorkers enthält immer die Anzahl der erstellten Arbeiter, die gleichzeitig die letzte ID ist, die Sie ausgegeben haben.

Zusammenfügen

Da diese Frage einige Upvotes (= Interesse) bekommen hat, fasse ich das Obige in einem Blueprint zusammen:

%Vor%

Beachten Sie, dass Sie in Java den primitiven Typ nicht initialisieren müssen int bis 0 , da dies der Standardwert für int ist . Natürlich ist es in Ordnung, es trotzdem zu tun - es tut nie weh, explizit zu sein.

    
domsson 13.04.2017, 14:24
quelle
4

Sie sind tatsächlich ziemlich nah am Erfolg.

Statische Member gehören, wie Sie vielleicht schon wissen, zu der Klasse selbst, nicht zu jeder Instanz. Aber wie Sie sagten, sollte jeder Arbeiter seine eigene eindeutige ID haben, also sollte workId nicht statisch sein.

Wir benötigen jedoch immer noch eine statische Variable, um zu verfolgen, welche ID dem nächsten von uns erstellten Mitarbeiter übergeben werden soll. Lassen Sie uns eins erklären:

%Vor%

Dann ordnen Sie in Ihrem Konstruktor nextWorkId zu workId zu, dann erhöhen Sie nextWorkId :

%Vor%

Sie können es auch so schreiben:

%Vor%     
Sweeper 13.04.2017 14:24
quelle

Tags und Links