Re: Hairy generics question
On 02/24/2012 11:12 AM, firstname.lastname@example.org wrote:
Well, after writing a long response addressing the more structure-related comments, my submission got lost in the ether.
Suffice to say, I believe that the circularity is necessary at the deeper levels of my framework. My endpoint presenters act as widgets to the outside world, where I have indeed removed most of the types, except the bean type. But, any individual presenter is intimately tied to a view, since both need to invoke specific methods on the other. Some views need to know P, and presenters need to know V. In order to have abstract base views and presenters, the self-parametrization arose - this is a presenter for V, but only those V that support at least this P.
Perhaps the circularity is necessary, but I've worked with my fellows on a few
hairy generics issues where circularity seemed necessary, and it never was.
Each time it turned out that an acyclic type graph did the trick, and better
than the initial circular approach.
Of course since you can't share any of the relevant details we have no way of
helping you see if there is an acyclic approach. Still, I cannot accept your
simple declaration that there isn't. The odds are just too strongly against it.
Unfortunately, when I tried to come up with a reduced set of declarations to post, I oversimplified and left out some of the nested parametrization. And, when I went to put those back in, I realized the issue. Once I lock in the base view, the V disappears.
So, the real issue was not with the class that I found the error in, which was trying to use CompItemView, but in CompItemView itself, when I left in the V parameter. It should be:
public class CompItemView<
T extends CompInfo,
P extends AbstractCompItem<T, P, CompItemView<T, P>>>
extends AbstractCompItemView<T, P, CompItemView<T, P>>
implements CompItemViewInterface<T, P, CompItemView<T, P>>
after removing the V from the CompItemView parametrization.
That's a step in circularity reduction. How is it necessary when your own
experience shows that its removal helped? I'm confused.
Honi soit qui mal y pense.