Jednym z problemów byłoby to, że w wielu przypadkach kluczem tabeli skrótów byłby ciąg znaków. Dlatego konsumenci tej metody musieliby wiedzieć, jakich kluczy użyć do wyodrębnienia danych. Dałoby to możliwość wystąpienia błędów spowodowanych błędami w pisowni podczas uzyskiwania dostępu do danych.
Kolejną wadą jest zdolność do refaktoryzacji. Jeśli później zdecydujesz się zmienić nazwisko członka, będziesz mieć kilka magicznych ciągów, które również należy zmienić. O wiele łatwiej jest zmienić nazwę członka klasy za pomocą narzędzi do refaktoryzacji dostarczanych przez większość dobrych IDE. W przypadku tabeli skrótów prawdopodobnie będziesz musiał wykonać operację znajdowania / zastępowania wszystkich plików źródłowych, co może być problematyczne.
Na koniec stracisz sprawdzanie czasu kompilacji dostępu członka - zarówno pod względem nazwy, jak i typu. To ostatnie nie stanowi problemu, jeśli twoja tabela skrótów zawiera tylko jeden typ obejct, ale jeśli zawiera wiele (nawet w tym samym łańcuchu hierarchii), naprawdę chcesz wykorzystać system typów swojego języka i sprawdzić tam czas kompilacji. W większości IDE będziesz mieć jakieś funkcje inteligentnego / autouzupełniania - działają one patrząc na system typów, ale nie będą w stanie pomóc ci z kluczami tabeli skrótów.
Jeśli chodzi o czasy, w których wskazane byłoby zwrócenie tabeli skrótów (lub innej takiej kolekcji par wartości klucza), można jej użyć, gdy zarówno wartości, jak i klucze nie są znane w czasie kompilacji. Na przykład, jeśli masz metodę, która analizuje ciąg zapytania i zwraca klucze i odpowiadające im wartości, tabela skrótów byłaby dobrym wyborem. W takim przypadku warto również pomyśleć o zwróceniu pewnego rodzaju niezmiennej lub tylko do odczytu tabeli mieszającej.
Edycja - większość punktów poruszonych w tej odpowiedzi przestaje mieć zastosowanie, gdy mówisz o dynamicznych językach :)