如何在 class 中使用扩展泛型类型?

How do I use an extended generic type's type in a class?

假设我有一些 类 如下:

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 声明为同一个 class 中的泛型。

public class C<TA extends A, TB extends B<TA>> {
    TA varOfTypeTA;
}

然后您可以在 class 中使用 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;
}

您必须通过两种通用类型。所以,例如:

class C<TB extends B<TA>, TA extends A> {
    TA varOfTypeTA;
}

class Horse extends A {}

class HorseHerd extends B<Horse> {}

class HorseHerder extends C<HorseHerd, Horse> {
    Horse getFavoriteHorse() { return varOfTypeTA; }
}