I think I have a slightly different problem.  This,

  public interface PrintableFactory<T> {
     Printable<T> create(List<T> items, Map<String, Column<T, ?>>
columns);
   }

needs to be this ,

  public interface PrintableFactory { 
      <T> Printable<T> create(List<T> items, Map<String, Column<T, ?>>
columns); 
   }

no generic on the class. Does your approach still work?

Bill


On Sat, 2010-11-20 at 13:22 -0500, Christian Goudreau wrote:

> You know, my printable factory actually creates a CellTable !
> 
> 
> 
> You might be interested in this:
> http://pastebin.com/F62Wdwn2
> 
> 
> Cheers,
> 
> 
> On Sat, Nov 20, 2010 at 1:13 PM, Bill de hÓra <[email protected]> wrote:
> 
>         On Sat, 2010-11-20 at 12:42 -0500, Christian Goudreau wrote:
>         
>         >         Am I right in saying Guice doesn't supporting
>         >         binding generic methods currently even with
>         >         TypeLiteral/FactoryProvider tricks?  
>         > 
>         > That does work Using Guice 3.0 Assisted injection and
>         > TypeLiteral:
>         >  
>         >     install(new GinFactoryModuleBuilder().implement(new
>         > TypeLiteral<Printable<Country>>() { }, new
>         > TypeLiteral<PrintableImpl<Country>>() { }).build(new
>         > TypeLiteral<PrintableFactory<Country>>() {
>         >     }));
>         > 
>         > 
>         > Well, the caveat is that I have to bind every permutation.
>         
>         
>         
>         
>         Right. I don't have concrete types for classes at compile time
>         to give to a TypeLiteral, I have method generics like these -
>         
>         Column<String, String> c1 = Builder.newColumn("name1",
>         "value");
>         Column<byte[], String> c2 = Builder.newColumn(key, "value");
>         Column<TimeUUID, byte[]> c2 = Builder.newColumn(tkey, value);
>         
>         etc
>         
>         
>         
>         
>         > I'm sure something similar can be done with normal provider.
>         > Also given the code you gave, I think assisted injection
>         > would be a cleaner solution.
>         
>         
>         
>         
>         I'd love to see something working.
>         
>         Bill
>         
>         
>         
>         
>         
>         
>         > 
>         > Cheers,
>         > 
>         > On Sat, Nov 20, 2010 at 10:36 AM, Bill de hÓra
>         > <[email protected]> wrote:
>         > 
>         >         Thanks Fred, the ProviderFactory's 'free'
>         >         implementation had lead me down the wrong path. -
>         >         normal Providers were exactly what I needed.  I
>         >         ended up with this
>         >         
>         >         public class Module extends AbstractPropertiesModule
>         >         {
>         >             @Override
>         >             protected void configureModule() {
>         >         
>         >         
> bind(ColumnFactory.class).toProvider(ColumnFactoryProvider.class);
>         >             }
>         >         
>         >             static class ColumnFactoryProvider implements
>         >         Provider<ColumnFactory> 
>         >         
>         >             {
>         >                 @Override
>         >                 public ColumnFactory get() {
>         >                     return new ColumnFactory()
>         >                     {
>         >                         @Override
>         >         
>         >                         public <N, V> Column<N, V> create(N
>         >         name, V value) {
>         >                             return new ColumnImpl<N,
>         >         V>(name, value);
>         >                         }
>         >         
>         >                         @Override
>         >                         public <N, V> Column<N, V> create(N
>         >         name) {
>         >                             return new ColumnImpl<N,
>         >         V>(name);
>         >                         }
>         >         
>         >                         @Override
>         >                         public <N, V> Column<N, V> create(N
>         >         name, V value, Long timestamp) {
>         >                             return new ColumnImpl<N,
>         >         V>(name, value, timestamp); 
>         >         
>         >                         }
>         >                     };
>         >                 }
>         >             }
>         >         }
>         >         
>         >         public class Builder
>         >         {
>         >             private static Injector theInjector =
>         >         Guice.createInjector(new
>         >         datagrid.api.module.Module());
>         >             private static ColumnFactory theColumnFactory =
>         >         theInjector.getInstance(ColumnFactory.class);
>         >         
>         >         
>         >             public static <K, V> Column<K, V> newColumn(K
>         >         name, V value) {
>         >                 return theColumnFactory.create(name, value);
>         >             }
>         >         
>         >             public static <K, V> Column<K, V> newColumn(K
>         >         name) {
>         >                 return theColumnFactory.create(name);
>         >             }
>         >         
>         >             public static <K, V> Column<K, V> newColumn(K
>         >         name, V value, Long timestamp) {
>         >                 return theColumnFactory.create(name, value,
>         >         timestamp);
>         >             }
>         >         
>         >         }
>         >         
>         >         also a nice approach for legacy factory/builder
>         >         code.
>         >         
>         >         
>         >         Bill 
>         >         
>         >         
>         >         
>         >         On Sat, 2010-11-20 at 09:21 -0500, Fred Faber wrote:
>         >         
>         >         
>         >         > I envision your interface as:
>         >         > 
>         >         > 
>         >         > interface ColumnFactory {
>         >         >   <K, V> Column<K, V> newColumn(
>         >         >       K name, V value, long timestampMillis);
>         >         > }
>         >         > 
>         >         > Then you could adapt your current implementation:
>         >         > 
>         >         > 
>         >         > bind(ColumnFactory.class)
>         >         >   .toProvider(new Provider<ColumnFactory>(){
>         >         >      @Override public ColumnFactory get() {
>         >         >          return  new ColumnFactory() {
>         >         >             @Override  public  <K, V> Column<K,
>         >         > V>   
>         >         >                newColumn(
>         >         >                   K name, V value, long
>         >         > timestampMillis) {
>         >         >                  return Builder.newColumn(
>         >         >                      name, value,
>         >         > timestampMillis);
>         >         >                  }
>         >         >                );
>         >         >             }
>         >         >           }});
>         >         > 
>         >         > 
>         >         > Nothing to worry about here with generic methods.
>         >         > 
>         >         > 
>         >         > -Fred
>         >         > 
>         >         > 
>         >         > 
>         >         > On Sat, Nov 20, 2010 at 8:58 AM, Bill de hÓra
>         >         > <[email protected]> wrote:
>         >         > 
>         >         >         
>         >         >         I have a Builder object that generates
>         >         >         objects with generic methods like this -
>         >         >         
>         >         >         public class Builder
>         >         >         {
>         >         >             public static <K, V> Column<K, V>
>         >         >         newColumn(K name, V value, long tstamp) {
>         >         >                 return new ColumnImpl<K, V>(name,
>         >         >         value, tstamp);
>         >         >             }
>         >         >         }
>         >         >         
>         >         >         ie, it's akin to Guava's Maps/Lists
>         >         >         classes. I'd like the impl classes to be
>         >         >         provided by Guice, eg
>         >         >         
>         >         >         public class Builder
>         >         >         {
>         >         >             private static Injector theInjector =
>         >         >         Guice.createInjector(new
>         >         >         datagrid.api.module.Module());
>         >         >             private static ColumnFactory
>         >         >         theColumnFactory =
>         >         >         theInjector.getInstance(ColumnFactory.class);
>         >         >         
>         >         >             public static <K, V> Column<K, V>
>         >         >         newColumn(K name, V value, long tstamp) {
>         >         >                 return
>         >         >         theColumnFactory.create(name, value,
>         >         >         long);
>         >         >             }
>         >         >         }
>         >         >         
>         >         >         Am I right in saying Guice doesn't
>         >         >         supporting binding generic methods
>         >         >         currently even with
>         >         >         TypeLiteral/FactoryProvider tricks? 
>         >         >         
>         >         >         Bill 
>         >         >         -- 
>         >         >         You received this message because you are
>         >         >         subscribed to the Google Groups
>         >         >         "google-guice" group.
>         >         >         To post to this group, send email to
>         >         >         [email protected].
>         >         >         To unsubscribe from this group, send email
>         >         >         to google-guice
>         >         >         [email protected].
>         >         >         For more options, visit this group at
>         >         >         
> http://groups.google.com/group/google-guice?hl=en. 
>         >         > 
>         >         > 
>         >         > 
>         >         > 
>         >         > -- 
>         >         > You received this message because you are
>         >         > subscribed to the Google Groups "google-guice"
>         >         > group.
>         >         > To post to this group, send email to
>         >         > [email protected].
>         >         > To unsubscribe from this group, send email to
>         >         > [email protected].
>         >         > For more options, visit this group at
>         >         > http://groups.google.com/group/google-guice?hl=en.
>         >         
>         >         
>         >         
>         >         
>         >         -- 
>         >         You received this message because you are subscribed
>         >         to the Google Groups "google-guice" group.
>         >         To post to this group, send email to
>         >         [email protected].
>         >         To unsubscribe from this group, send email to
>         >         [email protected].
>         >         For more options, visit this group at
>         >         http://groups.google.com/group/google-guice?hl=en.
>         >         
>         > 
>         > 
>         > 
>         > 
>         > -- 
>         > Christian Goudreau
>         > www.arcbees.com
>         > 
>         > 
>         > 
>         > -- 
>         > You received this message because you are subscribed to the
>         > Google Groups "google-guice" group.
>         > To post to this group, send email to
>         > [email protected].
>         > To unsubscribe from this group, send email to google-guice
>         > [email protected].
>         > For more options, visit this group at
>         > http://groups.google.com/group/google-guice?hl=en.
>         
>         
>         
>         
>         -- 
>         You received this message because you are subscribed to the
>         Google Groups "google-guice" group.
>         To post to this group, send email to
>         [email protected].
>         To unsubscribe from this group, send email to google-guice
>         [email protected].
>         For more options, visit this group at
>         http://groups.google.com/group/google-guice?hl=en.
>         
> 
> 
> 
> 
> -- 
> Christian Goudreau
> 
> www.arcbees.com
> 
> 
> 
> 
> 
> -- 
> You received this message because you are subscribed to the Google
> Groups "google-guice" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to google-guice
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/google-guice?hl=en.


-- 
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-guice?hl=en.

Reply via email to