Hi,

I'm finally writing my first Guice module and I'm not sure how to
proceed on using "new" inside a module.  For instance, if I have 2
interfaces A and B that I want to make available from my module to non-
Guice modules:

public interface A
{
    B<String> getUp();
    B<String> getDown();
}

Is it a best-practice to implement as:

class Aimpl
{
    private final B<String> bUp = new BUp();
    private final B<String> bDown = new BDown();

    public B<String> getUp() { return bUp; }
    public B<String> getDown() { return bDown; }
}

Where I am using "new" to create objects, but only within my own
module, or is it best to rely on Guice to give me these objects:

class Aimpl
{
    private final B<String> bUp;
    private final B<String> bDown;

    @Inject
    Aimp( @Named( "Up" ) final B<String> bUp, @Named( "Down" ) final
B<String>bDown )
    { this.bUp = bUp; this.bDown = bDown; }

    public B<String> getUp() { return bUp; }
    public B<String> getDown() { return bDown; }
}


In reality my classes are larger with more "get" methods on A.  For
instance, I have an "A" interface that gives access to a number of
Comparator<MyObject> strategies.  Think of my "A" as similar to the
Predicates class in Guava but I want to expose "A" as an interface
instead of a static class so I can mock it, and each of the generic
types is specialized for my classes.  However, my Aimpl constructor is
now accepting too many parameters.

I suppose if this was a new project I would simply inject a strategy
directly into each class that requires the strategy and not have the
"A" interface or class.  In my case I need to expose these strategies
to both other Guice modules and legacy non-Guice-ified code and
therefore I have created the "A" interface.

I guess the bottom line is that I need advice on using "new" within a
module to directly instantiate other package-visible classes in the
package.

Thanks for your time.
Jeff

-- 
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