Re: Delegation and generics craziness



Steven Simpson wrote:


But 'delegate' only takes B keys - 'A's are too general, and you're trying to by-pass this restriction. The error is alerting you to this.


You may have to do something similar with V too; I haven't checked.

Yes, I think you do.


(You might be able to use <? super K>, but there are probably other methods which simultaneously impose <? extends K> or even <K>, so together they force you to use just <K>.)


I think the basic problem is that for a Map, K and V are both an input and an output. (You can get the keys out as well as put them in.) And <? extends X> doesn't work as an output. Semantically, it's just wrong. Of course, <? super X> doesn't work as an input, so you're stuck.

The correct type of the delegate might be Map<?,?>, but I'm not completely sure about that.

Fundamentally, as long as you can prove that only a certain type can go into the delegate, it might be ok to use the raw type. But this is kind of a no-no, so the <?,?> form might actually be the best, and equivalent to the raw type in this instance.

I'm not 100% sure, but that was my quick, gut-level analysis of the problem.
.