问题
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 ?
回答1:
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.
来源:https://stackoverflow.com/questions/8187675/generics-in-java