7

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 ?

ROMANIA_engineer
  • 54,432
  • 29
  • 203
  • 199
Lior
  • 247
  • 2
  • 6

1 Answers1

14

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.

Kerrek SB
  • 464,522
  • 92
  • 875
  • 1,084
  • This is a great explanation. I'm wondering though, what are some applications of this other than the `Enum` usage already suggested? A linked list maybe? – flow2k May 15 '17 at 08:06