Если вы посмотрите на исходный код реализации Sun Class.getSimpleName()
, вы заметите, что он возвращает новый экземпляр String каждый раз, когда вы его вызываете. Однако многие другие функции класса Class кэшируются.Почему Class.getSimpleName() не кэшируется?
Поскольку простое вычисление имен не кажется легким, и в JavaDoc нет ничего, чтобы сказать, что он должен каждый раз возвращать новый экземпляр, он должен быть хорошим кандидатом на кеширование. Мне интересно, может ли быть какая-нибудь причина дизайна, почему это не кэшировано?
Я спрашиваю, потому что многие фреймворки используют простые имена все время, и это такая легкая вещь для кеширования.
Кэширование это увеличило бы память, хранящуюся в каждом классе, для сомнительного повышения производительности. –
Вы всегда можете добавить свое собственное кеширование, используя 'AspectJ', если хотите. – selig
@JBNizet Но для любого типа без массива операция является подстрокой потенциально интернированной строки, которая не требует большой дополнительной памяти. –