It defines an anonymous class that is a subclass of ArrayList:
return new ArrayList<Module>() {
...
};
And this subclass contains an instance initializer block, i.e. a block of code that is executed each time an instance of this class is constructed:
{
add(new AModule());
add(new BModule());
add(new CModule());
}
I would say that this is a bad practice. Defining a new class just to be able to add something to an ArrayList is useless.
Just do
List<Module> list = new ArrayList<>();
list.add(new AModule());
list.add(new BModule());
list.add(new CModule());
return list;
Or, if you use Guava:
List<Module> list = Lists.newArrayList(new AModule(), new BModule(), new CModule());
Or
List<Module> list = new ArrayList<>(Arrays.asList(new AModule(), new BModule(), new CModule()));