2013-12-22 35 views
0

http://code.google.com/p/google-guice/的Java吉斯 - 方法toProvider不适用于我从这里以下吉斯文件的参数

和我被困在toProvider方法。当我尝试这样做:

bind(Shape.class).toProvider(ShapeProvider.class);

我得到这个错误:

The method toProvider(Provider<? extends Shape>) in the type LinkedBindingBuilder<Shape> is not applicable for the arguments (Class<ShapeProvider>)

我下面的代码:

配置类

public class Configuration extends AbstractModule{ 
    @Override 
    protected void configure(){ 
     bind(Shape.class).toProvider(ShapeProvider.class); 
     bind(Triangle.class).to(IsoTriangle.class); 
    } 

ShapeProvider类

public class ShapeProvider implements Provider<Shape> { 
    private int length; 
    @Inject 
    public ShapeProvider(int length){ 
     this.length = length; 
    } 
    public Shape get(){ 
     Shape triangle = new Triangle(length); 
     return triangle; 

    } 
} 

Shape接口

public interface Shape { 

} 

三角类

public class Triangle implements Shape{ 
    int length; 
    public Triangle(){ 
    } 
    public Triangle(int lenght){ 
     this.length = lenght; 
    } 
} 

难道我错过了什么或有未在文件中提到的东西吗?

更新:

提供接口:

public interface Provider<T> { 
    T get(); 
} 
+1

检查您的提供商的导入。你可能会输入错误的一个 – dhamibirendra

+0

@dhamibirendra谢谢你的提示,即使这不是它,但这表明我做错了什么。 – Andrius

回答

0

我发现有什么问题。我认为我需要自己实现提供者接口,如Google/Guice文档中所示,但是它显示了该接口的外观。所以我不小心覆盖了原来的Provider接口。当我删除我的提供者接口时,一切都解决了。

1

如果使用toProvider你必须提供一个Provider实例。见LinkedBindingBuilder.toProvider

bind(Shape.class).toProvider(new ShapeProvider()); 

的Javadoc或你应该使用to这需要一个类作为参数。又见LinkedBindingBuilder.to()

bind(Shape.class).to(ShapeProvider.class); 

编辑

我无法重现你的问题的javadoc。我创建了几个类来模拟问题(因为我现在不想设置guice),但是正如我期望的那样...没有编译器错误。

下面的代码是类型相当于guice api,它编译。

public class Main { 

    public static void main(String[] args) { 
     LinkedBindingBuilder<Shape> linkedBindingBuilder = new LinkedBindingBuilder<Shape>(); 
     linkedBindingBuilder.toProvider(new ShapeProvider()); 
    } 

    public static class ShapeProvider implements Provider<Shape> { 
     public Shape get() {return null;} 
    } 

    public static class Shape {} 

    public static class LinkedBindingBuilder<T> { 

     public ScopedBindingBuilder toProvider(Provider<? extends T> provider) { 
      return null; 
     } 
    } 

    private static interface Provider<T> { 
     T get(); 
    } 

    private static class ScopedBindingBuilder {} 
} 
+0

它仍然给出相同的错误。 Eclipse建议我这样做 - 在'toProvider'中:'(Provider <?extends Shape>)''。然后错误消失,但它似乎我必须在提供程序中显示它扩展/实现形状?..但我表明它像供应商是不够的? – Andrius

+0

@Andrius我无法重现该问题。查看示例代码。 –