Im not really worried about the efficiency, Im more worried about this creating some corner case or some other issue that I am missing. I just figured there was a reason why I dont see this too often.
–
user489041Apr 4 '11 at 19:43

You seem to be asking (at least) two different things here. The double-bracket idiom is known and often used as a shorthand for creating anonymous inner classes, replacing the explicit constructor with an initializer block. Usually this makes the code more readable, so I would say it's OK.

OTOH since (nonstatic) initializer blocks are a relatively recent addition to the language, some developers may not be familiar with them though, which may create confusion. And of course, as with almost any techniques, when overused, it can create more problems than it solves.

Like most questions of this nature, I unfortunately must say "it depends". When you do it this way, you're actually creating a new anonymous class, so there is an ever-so-slight performance hit in terms of memory and CPU, but under most circumstances I would say that it is insignificant enough to ignore. If doing it this way makes your code more readable, and if it is the style the rest of your team is using, I would say to go with it.