Типичное создание объектов в Java:
Person joe = new Person();
joe.setFirstName("Joe");
joe.setLastName("Doe");
joe.setAge(33);
В то время как в C# это выглядит так:
var joe = new Person { FirstName = "Joe", LastName = "Doe", Age = 33 };
Чуть проще, не правда ли?
Недавно в исходниках на работе я наткнулся на интересную конструкцию, которая привлекла моё внимание:
Person joe = new Person() {{ setFirstName("Joe"); setLastName("Doe"); setAge(33); }};
Хм, странно, конечно, двойные фигурные скобочки? Но уж очень мне это напоминает код на C#.
Я обрадовался — для меня это выглядит получше четырёхстрочной инициализации. Однако, немного разобравшись в смысле этой конструкции, моя радость быстро превратилась в... что-то вроде подозрения.
Что на самом деле происходит за кулисами?