Zdravím konferenci,
narazil jsem na problém s generic a nevím, jestli je problém jen v mé
hlavě, nebo v javě a google mi zatím moc nepomohl, protože ani nevím jak
se řádně zeptat.
Problém je s následujícím kouskem kódu:
Class<Cache<String,String>> cls = Cache.class; // nelze
zkompilovat, eclipse mi nabízí, abych Class<Cache<String,String>>
převedl jen na Class<Cache>, ale to pak má warning, že používám RAW
typy, což ani nechci :).
Myslel jsem, že půjde zapsat
Class<Cache<String,String>> cls = Cache<String,String>.class; //ale toto
nelze kompilovat už vůbec, řve to, že Cache není definována a že ty
závorky tam nemají být a kdo ví co ještě.
Definice rozhraní cache je jednoduchá: public interface Cache<K, V>{....}
Původní problém je trochu jiný, ale důsledek stejný, ve skutečnosti
potřebuji:
Cache<String, String> cache = ComponentFactory.getComponent(Cache.class,
CACHE_NAME); //toto ale opět hází warning
definice té metody je:
public static <T> T getComponent(final Class<T> compClass, final String
compName);
čekal jsem možnost použití
Cache<String, String> cache =
UESComponentFactory.getComponent(Cache<String,String>.class,
TEST_CACHE); //ale jak plyne z výše uvedeného, toto nelze kompilovat
Jediné řešení, které funguje compilačně a bez warningu je:
@SuppressWarnings("unchecked")
Cache<String, String> cache =
UESComponentFactory.getComponent(Cache.class, TEST_CACHE);
ale to se mi nelíbí.
Nemáte někdo nějaký nápad, jak v javě zapsat správně
Cache<String,String>.class ? Klidně to můžete zkusit pro
Map<String,String> dopadne to stejně.
Díky za veškeré podněty
Petr