在通用类中嵌套通用

马塞尔·耶施克(Marcel Jaeschke):

我想在我的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章