Java Guice - toProvider 方法不适用于参数

标签 java dependency-injection guice

我从这里关注 Guice 文档: http://code.google.com/p/google-guice/

我被困在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;

    }
}

形状界面

public interface Shape {

}

三角形类

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

我错过了什么或者文档中没有提到什么吗?

更新:

提供商接口(interface):

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

最佳答案

如果您使用toProvider,您必须提供一个Provider实例。请参阅 LinkedBindingBuilder.toProvider 的 javadoc

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

或者您应该使用to,它将类作为参数。另请参阅 LinkedBindingBuilder.to() 的 javadoc

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

编辑

我无法重现您的问题。我创建了几个类来模拟问题(因为我现在不想设置 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 {}
}

关于Java Guice - toProvider 方法不适用于参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20728826/

相关文章:

java - 创建一个方法来搜索数组索引以查找重复值

java - 执行java程序时出错: java. io.invalidClassException

dependency-injection - 具有多个端点和依赖项注入(inject)的 Service Fabric

java - Guice 不会拦截带注释的方法

c# - 无法从 Microsoft.Extensions.Logging 解析 ILogger

java - Guice 使用不同的提供者实例化不同的类

Java Guice - 如何将整数值绑定(bind)到我的类/对象?

java - 从用户输入中获取元素数量?

java - Android:单击时更改按钮颜色

java - Guice 通用绑定(bind)接口(interface)到实现有界类型参数