Hallo,
ich hoffe, dass der Thementitel passend war .
Also ich habe einen Decoder, welcher einen Zahlenwert (int) erhält und damit eine gegebene Enumeration dekodieren soll.
Es geht speziell umASN1 den Typ Enumerated.
Ich habe also eine Klasse erstellt ASN1Enumerated, welche ASN1Type extended. Zum dekodieren soll dem Konstruktor der Klasse die Enum-Klasse übergeben werden und anschließend die Enum-Konstante per Getter abfragbar sein.
Ich möchte nun wissen, ob dies schlecht umgesetzt wurde oder ob sowas in Ordnung ist. Bei Ersterem: Wie könnte man es besser machen?
Daran sieht man jetzt nicht so viel. Vermutlich könnte (FALLS gewünscht) das T auch als
ASN1Enumerated<T extends Enum<T>> extends ...
dabeistehen, dann spart man sich innen die Raw Types
Ich würde das oben als finsteren Hack ansehen, aber ohne mehr Kontext ist es schwer, Verbesserungsvorschläge zu machen. Wieso ist der genaue enum-Typ unbekannt? Wieso muss es unbedingt ein enum sein? Hast du Kontrolle über alle Klassen, oder sind schon welche vorgegeben?
Der genaue Enum-Typ ist unbekannt, da es nur eine Bibliothek sein soll. Es gibt keine vorgegebenen Klassen.
Ich nehme an, dass ihr beiden wisst was ASN.1 ist oder? Der ASN.1 universal type Enumerated entspricht ja eigentlich in der Funktion dem von Java enum. Deswegen wollte ich dies so umsetzen.
Übertragen wird letztendlich dann auch nur ein Integer mit dem ordinal des Enum.
Alle Klassen welche ASN1Type extenden beinhalten ein Object "value", welches das entsprechende Java-Analog ist.
Man könnte auch sagen... ok ich halte einfach nur ein int-Wert als Value und der Nutzer der Lib muss sich selbst um die Validierung kümmern. Das finde ich aber irgendwie "schlampig" .
Dann sagt mir eclipse, dass es ein unchecked Cast ist und bei Enum<?> jedoch nicht. Wenn ich mit instanceof prüfen möchte kommt folgendes:
Cannot perform instanceof check against parameterized type Enum<T>. Use the form Enum<?> instead since further generic type information will be erased at runtime
Die Methode stand bisher ja nicht dabei. Poste ggf. mal mehr (compilierbaren) Code (z.B. auch die Basisklasse und eine kleine main() mit der gewünschten Anwendung) aber sowas wie