man*_*ock 1 java generics nested-generics
说我有一些课程如下:
class A { }
class B<TA extends A> { }
class C<TB extends B<? extends A>> {
TA varOfTypeTA; // this throws an error obviously
}
Run Code Online (Sandbox Code Playgroud)
如何定义varOfTypeTATB的TA类型?
我知道我可以将其定义为A varOfTypeTA,但我希望它TA不是类型的A.
我试图强制它定义TA,class C<TB extends B<TA extends A>>所以我可以使用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
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能varOfTypeTA成为类型Horse?
也在TA同一个类中声明为泛型.
public class C<TA extends A, TB extends B<TA>> {
TA varOfTypeTA;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以TA在你的班级使用.
class HorseHerder extends C<Horse, HorseHerd> {
Horse getFavoriteHorse() { return this.varOfTypeTA; }
}
Run Code Online (Sandbox Code Playgroud)
我也惊讶地发现声明的顺序似乎并不重要.虽然我更愿意先声明TA,但我发现此代码也编译:
public class C<TB extends B<TA>, TA extends A> {
TA varOfTypeTA;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |