I saw some code on an unrelated question but it got me curious as I never saw such construct with Java Generics. What would be the use of creating a generic class that can take as type argument itself or descendants of itself. Here is example :
abstract class A<E extends A<E>> {
abstract void foo(E x);
}
the first thing that came to mind would be a list that takes a list as parameter. Using this code feels strange, how do you declare a variable of type A ? Recursive declaration !?
Does this even work ? If so did any of you see that in code ? How was it used ?
EDIT
Indeed it turns out my question is the same as this one only phrased differently, but the answers for that question will answer mine as well.
Also thanks for the reference to the Curiously Recurring Template Pattern which gives some historical background and further explanations on the subject.
This old blog entry probably gives the best all around explanation I found for us Java guys.
Now hard to choose a right answer here for they are all helpful, so I will go for the one that ended up yielding the most reading material (referenced above)