
Double Brace Initialization in Java - angeladur
http://www.c2.com/cgi/wiki?DoubleBraceInitialization
======
tzs
I know this is blasphemy in the Java world, but I'd probably use a
preprocessor to transform some clean syntax into the normal Java code. I'd
rather have the slight increase in build complexity over the potential issues
with the extra classes and the breaking of assumption about how things compare
and such.

~~~
syjer
Something like Xtend ( <http://www.eclipse.org/xtend/> ) ?

~~~
warmwaffles
Never heard of this. Thanks

------
philthom
Check out the Immutable Maps feature, does the same with some nice syntactic
sugar - [http://docs.guava-
libraries.googlecode.com/git/javadoc/com/g...](http://docs.guava-
libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableMap.Builder.html)

~~~
jrockway
You don't even need to use the Builder directly, just use the structure's "of"
method:

    
    
       ImmutableSet<Foo> foos = ImmutableSet.of(a, few, elements);
       ImmutableMap<Key, Value> map = ImmutableMap.of(k1, v1, k2, v2);

------
jfb
This just makes me glad I don't have to write Java any more.

~~~
irahul
> This just makes me glad I don't have to write Java any more.

You don't have to do it even if you are writing Java. This is a perfect
example of clever for the sake of being clever.

~~~
jlgreco
The issue of course is that both the clever way and the 'normal' way are not
exactly pleasant compared to most other modern languages.

------
manojlds
This seems to add more complexity than what it's worth. Non-final requirement
and the equals problem, i'd rather ignore it all together!

------
LinaLauneBaer
I am no Java expert but they write that this syntax automatically creates a
anonymous inner class - every time you create a collection instance in this
way. Or am I wrong about this?

Most of the examples given are creating static objects but the last example a
non-static object is created in the same way. Imagine you are doing this a
couple of times then you end up with a lot of anonymous classes. Isn't there a
limit on the number of classes you can have? At least it makes debugging
problematic.

But I might be wrong about this since I am not a Java expert...

~~~
brown9-2
In the majority of cases where you are deploying your java code on a server
you own, having a few dozen or hundred extra classes is not a big deal. Each
adds maybe a few kb to the size the jar, and as for loading costs, a class is
only loaded into a running JVM once.

The cases in which to worry about stuff like this is if you need to load the
code on someone else's machine, like with an applet or Android.

~~~
jimktrains2
Isn't this what jars are suppose to make transparent and simple?

------
ansciath
I consider this to be an antipattern, in part for some of the reasons listed
in the article. The syntactic convenience being attempted here is more
appropriately encapsulated as a utility method.

------
muyyatin
It can also make UI code much more readable, but it also comes with the cost
of making the bytecode much larger (each use of the double-brace
initialization creates a new class).

------
chamakits
I had known of this before, and I'm fairly certain I've used it before.
However, one thing I didn't consider is the equals issue commented on the
site. As attractive as it may be to use, I think from now on I will refrain
from using the double braces.

~~~
irahul
> I had known of this before, and I'm fairly certain I've used it before.

I consider myself pretty liberal when it comes to coding standards and being
clever, but this is something that will badly piss me off. I can't quite put
my finger on why I feel so, considering I am perfectly fine with most of the
perl tricks. For example, <https://gist.github.com/3392206> looks good to
me(you are using Perl, you should know about list and scalar contexts).

~~~
jrockway
Ah yes, the goatse operator.

------
J446
Collection literals for inclusion in JDK8:

<http://jcp.org/en/jsr/detail?id=337>

