what happens if down the line the index of the type changes?: ) class FunnierFactory<A,B> extends FunnyFactory<B>
-igor On Wed, Sep 16, 2009 at 3:43 PM, jWeekend <[email protected]> wrote: > Since you can NOT do > > class S<T>{S(){T t = new T();}} // broken > > how would you create an object of type T somewhere in S? Think about this > before you read on ... > > At the risk of reigniting the world-famous generics debates of yesteryear, > just as our noble core-developers regroup to start work on making 1.5 even > better than what is already the best Java web framework, I thought I'd share > the idea I suggested to one of our developers who was having a bad day with > generics (for several good reasons [1][2]) a couple of months ago, in case > you can make use of it somewhere, or, find an even more convoluted solution > - notice the innocent looking abstract modifier! > // not real code > // don't try this at home without adult supervision! > public abstract class FunnyFactory<T> { > private T instance = null; > public T getInstance() { > if (instance == null) { > try { > final ParameterizedType gsc = > (ParameterizedType)getClass().getGenericSuperclass(); > final Class<T> typeT = (Class<T>) > gsc.getActualTypeArguments()[0]; > instance = typeT.newInstance(); > } catch (InstantiationException e) { > e.printStackTrace(); > } catch (IllegalAccessException e) { > e.printStackTrace(); > } > } > return instance; } > } > > ... > > public class CreateInstanceOfTypeParameter { > @Test > public void testCreateInstanceOfTypeParameter() { > FunnyFactory<Point> factory = new FunnyFactory<Point>() {}; > factory .getInstance().x = 22; > factory .getInstance().y = 47; > assertEquals(new Point(22, 47), factory.getInstance()); > } > } > > Regards - Cemal jWeekend OO & Java Technologies, Wicket Training and > Development http://jWeekend.com > > [1] http://gafter.blogspot.com/2006/11/reified-generics-for-java.html > [2] > http://weblogs.java.net/blog/arnold/archive/2005/06/generics_consid_1.html > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
