泛型类中的嵌套泛型

2022-09-03 18:05:43

我想在我的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

相反,它可以工作,但第二个实际上是多余的,因为AbtractThing已经定义了类型。所以我喜欢摆脱它。EventThing<T extends AbstractThing<U>,U>U


答案 1

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

class EventThing<T extends AbstractThing<Double>>

请注意,在本例中是一个具体类,而不是类型参数。将其与以下内容进行比较:Double

class EventThing<T extends AbstractThing<U>>

请注意,这与上面的第一行代码具有完全相同的形式。编译器如何知道在第一种情况下,它意味着一个具体的类,而在第二种情况下,它意味着一个类型参数?DoubleU

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

class EventThing<T extends AbstractThing<U>, U>

答案 2

推荐