Ha megnézed a kódom, itt is 2*2 függvény készül, meglepődnék, ha C# alatt ez nem menne.
void addItem(String item);
void addItem(Integer item);
String getItem(int index, String item);
Integer getItem(int index, Integer item);
Ami a ClassCastException-t illeti, az dobódik, ha nem az a típus, amit ki akarsz olvasni.
A GWT/GXT rendre ezt a módszert használta, valószínűleg azért, mert a hash-ekkel könnyebben boldogult, mint más adatszerkezettel (java->javascript fordító). Emellett nem akarták, hogy a kód 90%-a kasztolásból álljon.