我想在我的api中提供以下内容:
class Foobar extends AbstractThing<Double>
class EventThing<Foobar> {
public Foobar getSource();
public Double getValue();
}
所以我这样写:
class EventThing<T extends AbstractThing<U>> {
public T getSource();
public U getValue();
}
但是java无法解决U
。
随着EventThing<T extends AbstractThing<U>,U>
代替它的工作原理,但第二个U
实际上是多余的“事业AbtractThing已定义的类型。所以我喜欢摆脱它。
你不能摆脱它。第二个U
不是多余的。您希望编译器将第U
一个解释为类型参数,但事实并非如此。您也可以这样写:
class EventThing<T extends AbstractThing<Double>>
请注意,Double
在这种情况下,它是一个具体的类,而不是类型参数。将此与以下内容进行比较:
class EventThing<T extends AbstractThing<U>>
请注意,它的形式与上面的第一行代码完全相同。在第一种情况下,编译器应该如何知道它Double
是一个具体的类,而在第二种情况下,编译器应该如何U
呢?
编译器不知道这一点,因此将其U
视为具体类,就像Double
第一行中的一样。让编译器知道它U
是类型参数的唯一方法是这样指定它:
class EventThing<T extends AbstractThing<U>, U>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句