在Guice中绑定没有类arg的实例

时间:2019-01-14 10:31:44

标签: java generics guice

为什么这在Guice中不起作用?

binder().bind(instance.getClass()).toInstance(instance);

我不太了解这种违反哪种泛型的极端情况,对我来说听起来不错。 IntelliJ中的错误消息是:

toInstance (capture<? extends java.lang.Object>) in LinkedBindingBuilder cannot be applied to (java.lang.Object)

1 个答案:

答案 0 :(得分:2)

编译器不知道instance.getClass()instance相关。

instanceNumberinstance.getClass()Class<? extends Number>,因为instance可能是Integer

然后,类型推断算法不知道instance是该Class<? extends Number>的实例。根据{{​​3}},toInstance是一种使用者方法,但是由于它受extends约束,因此唯一可以传递给它的是文字null

我想不出没有任何警告抑制的干净方法。但是在这种情况下,可以隐瞒(提供instance是一个可更改的类的实例):您比编译器对类型更为了解,所以请继续使用转义阴影。