我从这里关注 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/