You know, my printable factory actually creates a CellTable !

You might be interested in this:
http://pastebin.com/F62Wdwn2

<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
> [email protected]<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]<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]<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
> [email protected]<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]<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 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-guice?hl=en.

Reply via email to