Q:

Generics in Java

I would like to understand the following type of syntax.
Example:
public interface A < T extends A < T> > {

}

What is the logic of this interface ?

A:

This would be used as follows:
class X implements A<X> { /* ... */ }

In other words, you are forced to make the parameter of A the class X itself, and something like class X implements A<Unrelated> is forbidden.
This construction gives the interface access to X through the generic parameter, and the type restriction makes sure that it doesn't get abused. For instance, T can now be assumed to expose all methods that A does.
Note that this construction is formally somewhat similar to the curiously recurring template pattern in C++ (although it is technically quite different). In both languages it allows the "base class" to reason about its ultimate derived usage.

