Пошел через этот своеобразный способ инициализации карт Java inline.Java: Эффективные последствия встроенной инициализации HashMaps
Следующий код выглядит , расширяя класс Hashmap с помощью анонимного класса и затем используя (не статический) блок инициализатора.
Map<String, String> aMap = new HashMap<String, String>()
{{
put("gloves", "hand");
put("hat", "head");
put("shoes", "feet");
put("scarf", "neck");
}};
Каковы показатели Подразумевается использования выше код для инициализации HashMaps инлайн?
Я не видел, чтобы это использовалось очень часто. Является ли это хорошей практикой Java?
Почему бы вам не написать тестовое приложение для инициализации некоторых тестовых карт и убедиться сами? – ZeroOne
Первая проблема, которая приходит мне на ум, заключается в том, что анонимные классы производят файл _extra_ .class после компиляции. О производительности ... если бы она использовалась в статической инициализации (= только один раз в JVM), я не думаю, что производительность будет большой. Не уверен, что это хорошая практика, поскольку анонимный класс не может использоваться повторно, и расширение класса должно быть нацелено на изменение его поведения. –
@ZeroOne Правильный бенчмаркинг JIT'd-код чрезвычайно сложный. Прежде чем прибегать к бенчмаркам, важно понять, почему * что-то вроде этого следует ожидать быстрее или медленнее. – Boann