Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich suche etwas in der Art wie HashMap<String, Integer, Boolean>, also mit mehr als 2 Parametern.
Hab jetzt die Collection API gewälzt, aber offenbar bietet die so etwas nicht an.
Welche Rollen sollen die Drei Typen spielen? (Also, was ist Key und was ist Value?). Evtl. tut's schon eine
Map<String, Pair<Integer, Boolean>>
für eine geeignete Klasse "Pair<S,T>"...
Map<JComponent, Action, String, int> für eine Methode: registerHotkeys<JComponent, Action, String, int>,
zum Erzeugen von .registerKeyboardAction mit den übergebenden Parametern.
Damit ich nicht immer komplette Funktionsaufrufe schreiben muss, hätte ich gerne eine Collection, durch die ich einfach nur durch iteriern muss.
und was genau soll bei einer Map mit 4 (!) generischen Parametern jetzt der Key- und der Value-Typ sein?
Ich halte das vom Ansatz her schon für völlig unsinnig. Eine Map bildet einen Key auf einen Wert ab. Nicht mehr und nicht weniger. Wenn du irgendwelche komplexen Werte mit verschiedenen Komponenten hast, kann kapsele die in einer eigenen Klasse und benutze diese Klasse als Value-Typ der Map.
Also mit int funktioniert da schon mal gar nichts, höchstens mit Integer. Wie meine Vorschreiber schon andeuteten, eine Map mapped Keys auf Values, womit sie halt auf 2 Parametertypen begrenzt ist (Map<K, V> steht für Map<Key, Value> ). Um für die Komponenten eine Map für Namen, Keybindings (ich nehme mal an, dafür ist das int) und Actions zu bekommen, musst du dir für die letzten 3 Typen halt 'ne eigene Klasse stricken und diese Klasse als Valuetyp bei der Map angeben (siehe Beitrag von Marco13).
Java:
class Binding
{
public final String name;
public final Action action;
public final int key;
public Binding(String name, Action action, int key)
{
this.name = name;
this.action = action;
this.key = key;
}
}
Innerhalb dieser Klasse sollte man einen Mechanismus implementieren, welcher diverse Bindings einmalig macht, damit sie halt nur einmal verwendet werden können. Da es sich bei der Klasse Action um ein Interface handelt, empfiehlt es sich sogar, dass Binding dieses implementiert, statt nur, wie in meinem Beispiel, darauf zu delegieren. Die Zuweisung in die Map sieht dann ungefähr so aus:
Java:
Map<JComponent, Binding> keyBindings = new HashMap<JComponent, Binding>();
keyBindings<myJComponent, new Binding("Button1", myAction1, myKey);
Map<JComponent, Action, String, int> für eine Methode: registerHotkeys<JComponent, Action, String, int>,
zum Erzeugen von .registerKeyboardAction mit den übergebenden Parametern.
wie schon gesagt, lerne Klassen kennen und dann geht es. Achte darauf dass falls du Klassen als key nutzt, diese equals und hashcode richtig ueberschreiben.
Das kann man von 2 Seiten sehen.
1. Du hast recht. Map implementiert das InterfaceCollection nicht.
2. Ob Insel, Guido Krüger oder sonst wo - wann immer von Collections die Rede ist, wird dort auch die Map erwähnt. Ausserdem gibt es bisher keine Klasse Maps, sondern lediglich eine Klasse Collections, welche auch Methoden für Maps bereitstellt. Übersetzt man Collection ins deutsche, wird daraus eine Sammlung. Eine Map ist auch eine Sammlung, nur hat diese halt - nennen wir es - spezielle "Zeiger" auf ihre Inhalte.