Класс как ключ Hashtable - это хорошая идея? - PullRequest
1 голос
/ 21 ноября 2011

После некоторого рассмотрения я реализовал кэширование в своем приложении, в основном, используя хеш-таблицу, которая содержит Class в качестве ключа (который является классом, который соответствует определенной кэшированной сущности и наследуется от абстрактного AbstractCache) иконкретный объект кеша, который сделан из этого класса, что кажется довольно удобным.

Но будет ли хорошей идеей иметь Class в качестве ключа Hashtable, или я должен вместо этого использовать .canonicalName() или что-то подобное?

Ответы [ 2 ]

3 голосов
/ 21 ноября 2011

Если вам никогда не нужно выгружать классы, это, вероятно, не проблема.Но поскольку требования могут различаться в зависимости от того, как выполняется ваш код (автономное приложение Java или развернутый в веб-контейнере, корпоративном сервере и т. Д.), Может быть разумнее этого не делать.Утечки в Classloader - это очень неприятные ошибки, которые можно отследить и устранить.

Использование канонического имени может показаться гораздо лучшим решением.Однако помните о другой проблеме: если у вас есть несколько загрузчиков классов, которые могут загружать один и тот же класс, эти классы все равно будут считаться несовместимыми.Вы не сможете отличить их по их каноническому имени, в то время как два идентичных класса, загруженные разными загрузчиками классов, дадут два отдельных экземпляра Class и могут быть использованы в качестве ключей на одной карте.У него нет особых ограничений или требований для загрузчика классов, используйте каноническое имя.Если вы развертываете как нечто иное, чем отдельное Java-приложение, будьте осторожны с последствиями.

2 голосов
/ 21 ноября 2011

Звучит хорошо для меня. Я делал это в прошлом. Классы являются фактически неизменяемыми синглетонами, поэтому нет возможности использовать «неправильный» экземпляр класса.

Единственный раз, когда возникнет проблема, это если задействовано несколько загрузчиков ClassLoader, но это редко встречается в большинстве приложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...