Say I have some classes as follows:
class A { }
class B<TA extends A> { }
class C<TB extends B<? extends A>> {
TA varOfTypeTA; // this throws an error obviously
}
How can I define the type of varOfTypeTA
to be whatever TB's TA is?
I know I can define it as A varOfTypeTA
, but I want it to be of type TA
not A
.
I tried forcing it to define TA with class C<TB extends B<TA extends A>>
so I can use TA
, but this throws a syntax error.
To clarify, if I then define these classes:
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
}
How can I make varOfTypeTA
be of type Horse
?
Also declare TA
as a generic in the same class.
public class C<TA extends A, TB extends B<TA>> {
TA varOfTypeTA;
}
Then you can use TA
in your class.
class HorseHerder extends C<Horse, HorseHerd> {
Horse getFavoriteHorse() { return this.varOfTypeTA; }
}
나는 또한 선언의 순서가 여기서 중요하지 않다는 것을 알고 놀랐습니다. TA
먼저 선언하고 싶지만 이 코드도 다음과 같이 컴파일됩니다.
public class C<TB extends B<TA>, TA extends A> {
TA varOfTypeTA;
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다