Zdravím konferenci,
prosím, kdo by mě uměl nakopnout v následujícím problému: postupně si
osvojuji generické třídy v Javě 5.0 a narazil jsem na potřebu (resp.
bylo by hezké, kdyby to tak fungovalo) pomocí generických tříd stanovit
omezení, aby prvky mapy (java.util.Map) obsahovaly v klíči třídu
(Class<T>) a v hodnotě seznam parametrizovaný stejným typem (tj.
List<T>) ?. Typ T není pro všechny entries stejný, ale v rámci entry jde
vždy o tentýž typ.
Pak by mělo jít napsat:
List<BigDecimal> lb = new ArrayList<BigDecimal>;
lb.add(new BigDecimal("100"));
lb.add(new BigDecimal("200"));
map.put(BigDecimal.class,lb);
List<Integer> li = new ArrayList<Integer>;
li.add(1);
li.add(2);
map.put(Integer.class,li);
ale nesmělo by jít:
map.put(BigDecimal.class,li);
Podle mne to nějak vede na vytvoření generické třídy ve smyslu zápisu
class MyMapEntry<T> implements Map.Entry<Class<T>,List<T>>
ale prakticky nevím, jak dál.
Abych problém specifikoval úplně, tak ještě dodávám, že typ T je shora
omezený konkrétní pevně danou třídou. Např. pro ukázku uvedenou výše by
to byla třída Number a deklarace by vypadala MyMapEntry<T extends
Number> atd. Asi to nějak povede na vlastní mapu, ale nedaří se mi to
poskládat, s kolekcemi v Javě jinak (z 1.4) zkušenosti mám. Nebráním se
ani řešení odlišnému od MyMapEntry, ale rád bych zachoval interface Map.
Díky předem!
Tomáš Záluský