C
Cherukan
Java's runtime discard of class type information seems a bit hassle to
work around,
preventing lot of intuitive usages.
T someMethod( Class<T> clazz, T t) {
map.put(clazz, t);
return map.get(clazz);
}
works with passing in regular non-generic classes, but not
with classes with a type argument.
Another example:
import java.util.Arrays;
import java.util.EventListener;
import javax.swing.event.EventListenerList;
public class Test
{
EventListenerList list = new EventListenerList();
Test()
{
MyListener<Integer> m1 = new MyListener<Integer>();
MyListener<String> m2 = new MyListener<String>();
// this does not work
// list.add(MyListener<Integer>.class, new MyListener<Integer>());
// so use this
list.add(m1.getClass(), new MyListener<Integer>());
list.add(m2.getClass(), new MyListener<Integer>());
// Now how do I get just a list of Listeners that are have
// the Integer type argument?
// i.e.
// MyListener<Integer>[] integerListeners = ??????
}
public static class MyListener<T> implements EventListener
{
}
}
Any comments or suggestions?
Thx
work around,
preventing lot of intuitive usages.
T someMethod( Class<T> clazz, T t) {
map.put(clazz, t);
return map.get(clazz);
}
works with passing in regular non-generic classes, but not
with classes with a type argument.
Another example:
import java.util.Arrays;
import java.util.EventListener;
import javax.swing.event.EventListenerList;
public class Test
{
EventListenerList list = new EventListenerList();
Test()
{
MyListener<Integer> m1 = new MyListener<Integer>();
MyListener<String> m2 = new MyListener<String>();
// this does not work
// list.add(MyListener<Integer>.class, new MyListener<Integer>());
// so use this
list.add(m1.getClass(), new MyListener<Integer>());
list.add(m2.getClass(), new MyListener<Integer>());
// Now how do I get just a list of Listeners that are have
// the Integer type argument?
// i.e.
// MyListener<Integer>[] integerListeners = ??????
}
public static class MyListener<T> implements EventListener
{
}
}
Any comments or suggestions?
Thx