Однією з проблем буде те, що у багатьох випадках ключовим для хеш-таблиці буде рядок. Таким чином, споживачі цього методу повинні були б перед цим знати, які ключі використовувати для вилучення даних. Це дасть можливість помилок через помилки при доступі до даних.
Ще один недолік - рефакторізація. Якщо ви вирішите пізніше змінити ім’я члена, тоді у вас є купа магічних рядків, які також потрібно змінити. Набагато простіше перейменувати члена класу за допомогою інструментів рефакторингу, наданих більшістю хороших IDE. За допомогою хеш-таблиці вам, швидше за все, доведеться виконати операцію пошуку / заміни для всіх вихідних файлів, що може бути проблематично.
Нарешті, ви втратите час перевірки доступу учасника - як з назвою, так і з виду. Останнє не є такою проблемою, якщо ваша хеш-таблиця містить лише один тип предмета, але якщо вона містить багато (навіть у тому ж ланцюжку ієрархії), ви дійсно хочете використовувати типову систему своєї мови та отримати перевірку часу компіляції. У більшості IDE у вас є якісь функції intellisense / autocomplete - вони працюють, переглядаючи систему типів, але вони не зможуть допомогти вам з клавішами хеш-таблиць.
Що стосується випадків, коли було б доречно повернути хеш-таблицю (або іншу таку колекцію пар ключових значень), ви б використовували це, коли значення і ключі не відомі під час компіляції. Наприклад, якщо у вас є метод, який аналізує рядок запиту і повертає ключі та відповідні значення, хеш-таблиця буде хорошим вибором. У цьому випадку ви також хочете подумати над тим, щоб повернути якусь незмінювану чи хеш-таблицю лише для читання.
Редагувати - Більшість пунктів у цій відповіді перестають застосовуватись, коли ви говорите про динамічні мови :)