LinkedHashMap<beliebige enum wie definierbar, String>

  • Themenstarter Themenstarter jago
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
J

jago

Gast
Hi,

Ich will eine HashMap definieren, die als key-Parameter ein beliebiges Enum akzeptiert. Also so in der Art:

LinkedHashMap<beliebige enum, String> map = ...

geht sowas? Wie? Wenn nein, warum nicht?

Danke,
jago
 
Leroy42 hat gesagt.:
tfa hat gesagt.:
jago hat gesagt.:
geht sowas? Wie? Wenn nein, warum nicht?
Hast du es ausprobiert? Wenn nein, warum nicht?
Vielleicht weil jago es eben nicht durch Herumprobieren herauskriegen will,
sondern wissen will, warum es geht oder nicht geht.

Naja ausprobiert hab ich sicher schon sehr lange (20 min). Und auch in Google gesucht.

Aber sowas wie:

Code:
LinkedHashMap<? extends Enum, String> xxx = new LinkedHashMap<? extends Enum, String>();

geht bei mir nicht, weil er sagt, dass er das hinter dem = eben nicht instanzieren kann.

Irgendeine Idee was ich falsch mache?

Danke,
jago
 
tfa hat gesagt.:
Das ist doch schon eine bessere Problembeschreibung!

Wildcards kannst du beim Erzeugen des konkreten Objekts nicht benutzen (auf der rechten Seite des =), nur bei der Typdefinition (linke Seite).
Probier es mal so:
Code:
Map<Enum<?>,String> m = new HashMap<Enum<?>,String>();

Mehr Infos unter: http://www.angelikalanger.com/Articles/JavaSpektrum/31.Wildcards/31.Wildcards.html

Danke cool. Aber jetzt steh ich schon wieder vor einem Problem das glaube ich nicht loesbar ist: Obwohl man ja eigentlich Enums in einer Annotation definieren kann, ist das leider nicht mit einem beliebigen Enum moeglich 🙁

Code:
public @interface MapEntry {
	  Enum<?> key(); 
	  String value(); 
}


Oder gibt es auch dafuer eine Loesung?

Die Annotation sieht spaeter so aus:

@MapEntry(key=ein_Enum, value="ein String")

Das klappt wohl nicht...weiss jemand warum das nicht erlaubt wurde, da ja Enums erlaubt sind.

Danke,
jago
 
Man kann eine Enum innerhalb der Annotation definieren:

Code:
public @interface MapEntry {

    public enum Key {
        EINS, ZWEI, DREI
    };

    Key key();
    String value();
}

Soweit ich weiß, kann man keine allgemeine Enum verwenden, da die Annotation ja nicht
erzeugt wird wie ein Objekt und man keinen Typparameter angeben kann.
 
tfa hat gesagt.:
Man kann eine Enum innerhalb der Annotation definieren:

Code:
public @interface MapEntry {

    public enum Key {
        EINS, ZWEI, DREI
    };

    Key key();
    String value();
}

Soweit ich weiß, kann man keine allgemeine Enum verwenden, da die Annotation ja nicht
erzeugt wird wie ein Objekt und man keinen Typparameter angeben kann.

Schade. Wie in deinem Beispiel oben kannte ich das ja. Komisch, dass es nicht sowas wie EnumType gibt das Java signalisiert, dass hier ein beliebiges Enum stehen kann.

Naja, wenns nicht geht, gehts nicht.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben