Sử dụng khởi tạo Double Brace không phải là lý tưởng vì:
1. Bạn đang tạo quá nhiều lớp ẩn danh. Ví dụ:
Map source = new HashMap(){{
put("firstName", "John");
put("lastName", "Smith");
put("organizations", new HashMap(){{
put("0", new HashMap(){{
put("id", "1234");
}});
put("abc", new HashMap(){{
put("id", "5678");
}});
}});
}};
... sẽ tạo ra các lớp sau:
Test$1$1$1.class
Test$1$1$2.class
Test$1$1.class
Test$1.class
Test.class
Khá nhiều chi phí cho classloader (trình tải lớp) của bạn.
2. Bạn có khả năng tạo ra một memory leak (rò rỉ bộ nhớ). Nếu bạn lấy đoạn mã trên và trả về map đó từ một phương thức, các caller của phương thức đó có thể giữ các tài nguyên rất nặng mà không thể thu thập được.