Enums, oder doch was anderes?

Mappenz

Bekanntes Mitglied
Hallo,

ich habe Modelle mit ganzzahligen Nummern. Nun habe ich mir gedacht, dass ein Enum geschickt wäre.
Java:
public enum Model {
	PNEU0x1(0x1),
	BAND0x3(0x1),
	BAND0x5(0x1),
	LINE0x7(0x1),
	CRANE0x9(0x1),
	BAND0x11(0x1),
	BAND0x13(0x13),
	CRANE0x15(0x15),
	STAMP0x17(0x17),
	LINE0x19(0x19),
	BAND0x21(0x21),
	BAND0x23(0x23),
	CRANE0x25(0x25),
	STAMP0x27(0x27),
	LINE0x29(0x29);
	
	
	private int serial;
	private Models(int serial) {
		this.serial = serial;
	}
	public int serial() {
		return serial;
	}
	
}

Man kann erkennen, die Modelle sind nicht von 1 bis n durchnummeriert. Ich kenne aus C++, dass man den Enum Elementen werte Zuweisen kann. Die obige Lösung gefällt mir nicht. Nehmen wir an es gäbe eine Funktion
Code:
doSomething(Model)
, der Aufruf für BAND0x5 müsste so aussehen
Code:
doSomething(BAND0x5.serial())
. Das ist mehr Schreibarbeit als mir gefällt, außerdem sehe ich die Gefahr, dass jemand stattdessen
Code:
doSomething(BAND0x5)
aufruft. Das würde der Compiler ja schlucken.

Nach meiner eigenen Recherche glaube ich nun, dass man die Nummerierung von Enums in Java nicht beeinflussen kann. Ist das richtig? Gibt es eine bessere Alternative?

Kann ich eine Subklasse von Enum benutzen wie ein enum?

viele Grüße
Michael
 
Zuletzt bearbeitet:
Wenn du eine Methode
Code:
doSomething(Model)
hast, dann kannst du sie nicht per
Code:
doSomething(int)
aufrufen.

Die Methode die ein Model bekommt kann natürlich
Code:
serial()
aufrufen.
 
> außerdem sehe ich die Gefahr, dass jemand stattdessen doSomething(BAND0x5) aufruft. Das würde der Compiler ja schlucken.

also der Enum wird nicht direkt als int interpretiert, nein

eine bessere Nummerierung sehe ich nicht, aber du musst doch nur hinter jedem Wert eine Zahl schreiben?
gut, noch Konstruktor, Attribut, getter, aber das ist doch konstanter Aufwand..

in C++ wird direkt eine Nummer zugewiesen? was ist wenn du mal einen String brauchst, oder zwei int-Werte, oder oder,
sowas zu automatisieren ist doch nun wirklich nicht der Rede Wert,
die paar Zeilen, die man in jeder normalen Klasse auch schreiben müsste, tun nicht weh
 
Zuletzt bearbeitet von einem Moderator:
Der Aufruf wäre:
Code:
doSomething(Model.PNEU0x1);
.
Innerhalb der Methode wird dann vllt mal serial() aufgerufen.
 
Nach meiner eigenen Recherche glaube ich nun, dass man die Nummerierung von Enums in Java nicht beeinflussen kann. Ist das richtig? Gibt es eine bessere Alternative?

Kann ich eine Subklasse von Enum benutzen wie ein enum?

Was meinst du genau mit Nummerierung von Enums? Wenn du ein Enum hast, kannst du mit
Code:
Enum.ordinal()
die Position der Deklaration des Enums ermitteln, das geht dann von 0 bis n-1, wobei n die Anzahl deiner Enums ist.

Von Enums kannst du nicht erben. Wenn du den Code da oben hast, wäre es vielleicht fast sinnvoll eine einfache Klasse daraus zu machen.
 

Neue Themen


Zurück
Oben