generics类中的嵌套generics

我想在我的api中提供类似的东西:

class Foobar extends AbstractThing class EventThing { public Foobar getSource(); public Double getValue(); } 

所以我写这个:

 class EventThing<T extends AbstractThing> { public T getSource(); public U getValue(); } 

但java无法解析U

使用EventThing<T extends AbstractThing,U>代替它工作,但第二个U实际上是冗余的’因为AbtractThing已经定义了Type。 所以我喜欢摆脱它。

你无法摆脱它。 第二个U不是多余的。 您希望编译器将第一个U解释为类型参数,但事实并非如此。 你也可以这样写:

 class EventThing> 

请注意,在这种情况下, Double是具体类,而不是类型参数。 将此与以下内容进行比较:

 class EventThing> 

请注意,这与上面第一行代码的格式完全相同。 编译器应该如何知道在第一种情况下, Double是一个具体的类,而在第二种情况下, U是一个类型参数?

编译器无法知道这一点,并将U视为具体类,就像第一行中的Double一样。 让编译器知道U是类型参数的唯一方法是将其指定为:

 class EventThing, U>