問題の1つは、多くの場合、ハッシュテーブルのキーが文字列になることです。したがって、メソッドの利用者は、データを抽出するためにどのキーを使用するかを事前に知っておく必要があります。これにより、データにアクセスするときにスペルミスによるエラーが発生する可能性があります。
別の欠点はリファクタリングです。後でメンバーの名前を変更することにした場合は、変更する必要のある一連の魔法の文字列があります。最も優れたIDEが提供するリファクタリングツールを使用してクラスメンバーの名前を変更する方がはるかに簡単です。ハッシュテーブルを使用すると、すべてのソースファイルに対して検索/置換操作を実行する必要があり、問題が発生する可能性があります。
最後に、名前とタイプの両方に関して、メンバーアクセスのコンパイル時のチェックが失われます。ハッシュテーブルに含まれるオブジェクトのタイプが1つだけの場合、後者はそれほど問題になりませんが、同じ階層チェーン内でも多くのタイプが含まれている場合は、実際に言語のタイプシステムを利用してコンパイル時間をチェックする必要があります。ほとんどのIDEには、ある種のインテリセンス/オートコンプリート機能があります。これらは型システムを調べることで機能しますが、ハッシュテーブルキーを使用することはできません。
時間のようです値の両方際にハッシュテーブル(またはキーと値のペアのような他のコレクション)を返すために適切で、あなたはこれを使用すると、キーはコンパイル時に知られていません。たとえば、クエリ文字列を解析してキーと対応する値を返すメソッドがある場合は、ハッシュテーブルが適しています。この場合、ある種の不変または読み取り専用のハッシュテーブルを返すことも検討してください。
編集 -この回答で指摘されたポイントのほとんどは、動的言語について話しているときに適用されなくなります:)