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 ?
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 ?
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.
Enum
usage already suggested? A linked list maybe? –
Electrodeposit © 2022 - 2024 — McMap. All rights reserved.