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.