我想在我的api中提供类似的东西:
class Foobar extends AbstractThing<Double>
class EventThing<Foobar> {
public Foobar getSource();
public Double getValue();
}
Run Code Online (Sandbox Code Playgroud)
所以我写这个:
class EventThing<T extends AbstractThing<U>> {
public T getSource();
public U getValue();
}
Run Code Online (Sandbox Code Playgroud)
但java无法解决U.
随着EventThing<T extends AbstractThing<U>,U>代替它的工作原理,但第二个U实际上是多余的"导致AbtractThing已定义的类型.所以我喜欢摆脱它.
Jes*_*per 28
你无法摆脱它.第二个U不是多余的.您希望编译器将第U一个解释为类型参数,但它不会.你也可以这样写:
class EventThing<T extends AbstractThing<Double>>
Run Code Online (Sandbox Code Playgroud)
请注意,Double在这种情况下是具体类,而不是类型参数.将此与以下内容进行比较:
class EventThing<T extends AbstractThing<U>>
Run Code Online (Sandbox Code Playgroud)
请注意,这与上面第一行代码的格式完全相同.编译器应该如何知道在第一种情况下,Double它是一个具体的类,而在第二种情况下,U是一个类型参数?
编译器无法知道这一点,并将其U视为具体类,就像Double在第一行中一样.让编译器知道这U是一个类型参数的唯一方法是将其指定为:
class EventThing<T extends AbstractThing<U>, U>
Run Code Online (Sandbox Code Playgroud)