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.