, :
A a;
A (T).
- :
A<B> a;
A , . , - :
class A<T> {
public void fun(T t) {
}
}
class B<T extends B<T>> {
A<B<T>> a;
public void event() {
a.fun(this);
}
}
:
class A<T extends B<? extends T>> {
public void fun(T t) {
}
}
class B<T extends B<T>> {
A<? super B<T>> a;
public void event() {
a.fun(this);
}
}
, , , . (, , ).
class A<T extends B<? extends T>> , A B. B , B<? extends T> ( , T ).
class B<T extends B<T>> "self" Java. B () . B - "class C extends <B<C>>". , C.a A<? super B<C>>.
? super , B A, B. , , A<Shape> a Circle ( Shape, B). - . A<Circle>, A<Shape> Circle.