为什么这在Guice中不起作用?
binder().bind(instance.getClass()).toInstance(instance);
我不太了解这种违反哪种泛型的极端情况,对我来说听起来不错。 IntelliJ中的错误消息是:
toInstance (capture<? extends java.lang.Object>) in LinkedBindingBuilder cannot be applied to (java.lang.Object)
答案 0 :(得分:2)
编译器不知道instance.getClass()
与instance
相关。
说instance
是Number
:instance.getClass()
是Class<? extends Number>
,因为instance
可能是Integer
。
然后,类型推断算法不知道instance
是该Class<? extends Number>
的实例。根据{{3}},toInstance
是一种使用者方法,但是由于它受extends
约束,因此唯一可以传递给它的是文字null
。
我想不出没有任何警告抑制的干净方法。但是在这种情况下,可以隐瞒(提供instance
是一个可更改的类的实例):您比编译器对类型更为了解,所以请继续使用转义阴影。