Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / April 2006

Tip: Looking for answers? Try searching our database.

Generics: Using a typed class as a key.

Thread view: 
Cherukan - 18 Apr 2006 00:15 GMT
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
Thomas Hawtin - 18 Apr 2006 10:15 GMT
> Java's runtime discard of class type information seems a bit hassle to
> work around,
[quoted text clipped - 6 lines]
> works with passing in regular non-generic  classes, but not
> with classes with a type argument.

>    // 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
>   {

        public abstract Class<T> getTypeArgument();

>   }
> }
>
> Any comments or suggestions?

Nested generics can be confusing, and if unnecessary should be avoided.

Tom Hawtin
Signature

Unemployed English Java programmer
http://jroller.com/page/tackline/



Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.