作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一些类如下:
class A { }
class B<TA extends A> { }
class C<TB extends B<? extends A>> {
TA varOfTypeTA; // this throws an error obviously
}
如何定义 varOfTypeTA
的类型成为 TB 的 TA 是什么?
我知道我可以将它定义为 A varOfTypeTA
, 但我希望它的类型为 TA
不是A
.
我试图强制它用 class C<TB extends B<TA extends A>>
定义 TA所以我可以使用 TA
, 但这会引发语法错误。
澄清一下,如果我再定义这些类:
class Horse extends A { }
class HorseHerd extends B<Horse> { }
class HorseHerder extends C<HorseHerd> {
Horse getFavoriteHorse() { return varOfTypeTA; } // varOfTypeTA defined in class C must be of type Horse, otherwise I have to cast
}
我怎样才能制作varOfTypeTA
类型为 Horse
?
最佳答案
同时将 TA
声明为同一类中的泛型。
public class C<TA extends A, TB extends B<TA>> {
TA varOfTypeTA;
}
然后你就可以在你的类里面使用TA
了。
class HorseHerder extends C<Horse, HorseHerd> {
Horse getFavoriteHorse() { return this.varOfTypeTA; }
}
我也很惊讶地发现声明的顺序在这里似乎并不重要。虽然我更愿意先声明 TA
,但我发现这段代码也可以编译:
public class C<TB extends B<TA>, TA extends A> {
TA varOfTypeTA;
}
关于java - 如何在类中使用扩展泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29254898/
我是一名优秀的程序员,十分优秀!