[英]Java Guice - the method toProvider is not applicable for the arguments
我正在从此处关注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;
}
}
我是否想念某些东西或文档中没有提到的东西?
更新:
提供者接口:
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 {}
}
我发现出了什么问题。 我以为我需要自己实现提供者接口,如Google / Guice文档中所示,但是显示了该接口的外观。 所以我不小心覆盖了原始的Provider接口。 当我删除提供者接口时,一切都解决了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.