Dan, I see what you're saying...and it's certainly an interesting question.
I'd file a FR for this as I see the utility of the integration w/ guava, especially given the prevalence of Function. -Fred On Sat, Nov 6, 2010 at 7:15 PM, Fred Faber <[email protected]> wrote: > Sorry, I see now I misread your post. Let me have a re-read. > > > On Sat, Nov 6, 2010 at 7:12 PM, Fred Faber <[email protected]> wrote: > >> Dan, >> >> The problem is that you're trying to create a binding for a class that >> should only be created through its corresponding factory. This is why you >> see errors when binding your Function class itself. >> >> What is the expectation you have w.r.t. injecting the Function? >> >> -Fred >> >> On Sat, Nov 6, 2010 at 7:07 PM, Dan Billings <[email protected]> wrote: >> >>> I have bound them separately with: >>> >>> >>> >>> bind(TestAssisted.Factory.class).toProvider(FactoryProvider.newFactory(TestAssisted.Factory.class, >>> TestAssisted.class)); >>> functionTypeLiteral = new TypeLiteral<Function<String, >>> TestAssisted>>() { >>> }; >>> >>> bind(functionTypeLiteral).to(TestAssisted.Factory.class); >>> >>> but I get the same error. Whatever process Guice is using to whip up >>> an implementation to the Assisted factory apparently can't handle >>> multiple methods, even if it is equals(Object). >>> >>> But I still want to use Function in the end. Only the module will >>> know that it is actually pointing to TestAssisted.Factory. >>> >>> On Nov 6, 5:53 pm, Fred Faber <[email protected]> wrote: >>> > Dan, >>> > >>> > You shouldn't be binding the Function itself; instead, you're expected >>> to >>> > bind TestAssisted.Factory, which creates instances of your Function. >>> > >>> > -Fred >>> > >>> > >>> > >>> > >>> > >>> > >>> > >>> > On Sat, Nov 6, 2010 at 6:46 PM, Dan Billings <[email protected]> >>> wrote: >>> > > I'm attempting to short-circuit a lot of code by making my Factory >>> > > interfaces extend Guava's Function: >>> > >>> > > >>> http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/co... >>> > >>> > > public class TestAssisted { >>> > > interface Factory extends Function<String, TestAssisted> {} >>> > >>> > > @Inject >>> > > public TestAssisted(@Assisted String contents){} >>> > > } >>> > >>> > > I then bind it with: >>> > > bind(new TypeLiteral<Function<String,TestAssisted>>() >>> > > {}) .toProvider( FactoryProvider.newFactory( >>> > > TestAssisted.Factory.class,TestAssisted.class ); >>> > >>> > > This seems to be okay, but Guice trips over Function's equal's >>> method: >>> > >>> > > No implementation for java.lang.String annotated with >>> > > @com.google.inject.assistedinject.Assisted(value=) was bound. >>> > > while locating java.lang.String annotated with >>> > > @com.google.inject.assistedinject.Assisted(value=) >>> > > for parameter 0 at >>> > > com.billco.commons.test.TestAssisted.<init>(TestAssisted.java:18) >>> > > at com.google.common.base.Function.equals(Function.java:1) >>> > >>> > > Do I have any options to have Guice more or less ignore the "equals" >>> > > method declared in Function? I can't think of a good way to stick to >>> > > interfaces and yet remove the necessity to implement "equals". >>> > >>> > > Thanks for your help, >>> > > -Dan >>> > >>> > > -- >>> > > 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]> >>> <google-guice%2bunsubscr...@google groups.com> >>> > > . >>> > > 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]. For more options, visit this group at http://groups.google.com/group/google-guice?hl=en.
