Talk About Network



Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > Java Help > Re: Can this ca...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 6 of 24 Topic 16045 of 16078
Post > Topic >>

Re: Can this callback mechanism be generified?

by Casper Bang <casper@[EMAIL PROTECTED] > May 2, 2008 at 08:58 PM

I managed to make the API just slightly easier to use, by extracting the 
type from Callback<T> rather than requiring an explicit Class to be 
supplied along with it. It's not pretty but I'm not sure of how to 
extract type T, since I guess its not readily available on the account 
of generics by erasure:

interface Callback<T> {
      String format(T object);
  }

class Somewhere {
      Map<Class<?>, Callback<?>> callbacks
           = new HashMap<Class<?>, Callback<?>>();

      public <T> void installCallback(Callback<T> callback) {

          callbacks.put(extractGenericType( callback ), callback);
      }

     private <T> Class extractGenericType(Callback<T> callback){
         Class clazz = Object.class;
         String interfaces = 
callback.getClass().getGenericInterfaces()[0].toString();
         int genTypeStart = interfaces.indexOf("<")+1;
         int genTypeEnd = interfaces.lastIndexOf(">");
         String genType = interfaces.substring( genTypeStart, genTypeEnd);

         try{
             clazz = Class.forName(genType);
         }
         catch (ClassNotFoundException ex){}

         return clazz;
     }

      public <T> void doCallback(T obj) {
          final Callback<? super T> callback = getCallback(obj);
          if(callback != null)
              System.out.println( callback.format( obj ) );
      }

      @[EMAIL PROTECTED]
({"unchecked"})
      private <T> Callback<? super T> getCallback(T obj) {
          return (Callback<? super T>) callbacks.get(obj.getClass());
      }
  }

class Main {
     public static void main(String[] args) {
         new Somewhere().installCallback( new Callback<Date>(){
             public String format(Date date) {
                 return SimpleDateFormat.getInstance().format(date);
             }
         });
     }
}

/Casper




 24 Posts in Topic:
Can this callback mechanism be generified?
Casper Bang <casper@[E  2008-05-02 04:51:44 
Re: Can this callback mechanism be generified?
Mark Space <markspace@  2008-05-02 04:21:23 
Re: Can this callback mechanism be generified?
Casper Bang <casper@[E  2008-05-02 13:14:16 
Re: Can this callback mechanism be generified?
Daniel Pitts <newsgrou  2008-05-02 08:34:23 
Re: Can this callback mechanism be generified?
Casper Bang <casper@[E  2008-05-02 19:58:28 
Re: Can this callback mechanism be generified?
Casper Bang <casper@[E  2008-05-02 20:58:55 
Re: Can this callback mechanism be generified?
Mark Space <markspace@  2008-05-02 13:33:23 
Re: Can this callback mechanism be generified?
Joshua Cranmer <Pidgeo  2008-05-02 20:59:06 
Re: Can this callback mechanism be generified?
Mark Space <markspace@  2008-05-03 23:33:40 
Re: Can this callback mechanism be generified?
Daniel Pitts <newsgrou  2008-05-02 14:14:03 
Re: Can this callback mechanism be generified?
Casper Bang <casper@[E  2008-05-03 03:45:00 
Re: Can this callback mechanism be generified?
Mark Space <markspace@  2008-05-03 23:27:15 
Re: Can this callback mechanism be generified?
Casper Bang <casper@[E  2008-05-05 04:01:44 
Re: Can this callback mechanism be generified?
Daniel Pitts <newsgrou  2008-05-04 20:24:40 
Re: Can this callback mechanism be generified?
Mark Space <markspace@  2008-05-05 04:06:24 
Re: Can this callback mechanism be generified?
Casper Bang <casper@[E  2008-05-05 20:54:51 
Re: Can this callback mechanism be generified?
Lew <lew@[EMAIL PROTEC  2008-05-05 21:09:20 
Re: Can this callback mechanism be generified?
Mark Space <markspace@  2008-05-05 21:23:44 
Re: Can this callback mechanism be generified?
Casper Bang <casper@[E  2008-05-05 20:36:28 
Re: Can this callback mechanism be generified?
Lew <lew@[EMAIL PROTEC  2008-05-05 21:16:23 
Re: Can this callback mechanism be generified?
Daniel Pitts <newsgrou  2008-05-06 10:25:33 
Re: Can this callback mechanism be generified?
Lew <lew@[EMAIL PROTEC  2008-05-06 18:56:19 
Re: Can this callback mechanism be generified?
Daniel Pitts <newsgrou  2008-05-06 15:58:21 
Re: Can this callback mechanism be generified?
thufir <hawat.thufir@[  2008-05-02 21:05:56 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Fri May 16 6:46:01 CDT 2008.