Diese Methode und eine Reihe anderer Methoden in der Map-Schnittstelle sind nicht generisch. Fast überall, wo ein Schlüsselwert als Parameter erwartet wird, akzeptiert er stattdessen Object, nämlich remove, get und containsKey.
Irgendeine Idee, warum sie diese Entscheidung getroffen haben. Meine Annahme ist, dass es gemacht wurde, um Legacy-Code zu unterstützen, aber für mich ist das eine schwache Position.
Kann mir jemand einen bestimmten Grund nennen, warum es vorzuziehen wäre, hier statt KeyType Object zu akzeptieren.
Die Objekte, die zum Abrufen / Entfernen / Prüfen der Existenz eines bestimmten Schlüssels verwendet werden, müssen nicht notwendigerweise vom selben Typ sein wie das Objekt, das zum Speichern verwendet wird (= der Schlüssel).
Er muss equal
sein und den gleichen hashCode
wie der Schlüssel zurückgeben, aber nichts in der Spezifikation besagt, dass er vom selben Typ sein muss.
Diese Tatsache wird selten verwendet und die meiste Zeit werden Sie die Werte mit den gleichen Schlüsseln (oder zumindest Objekten des gleichen Typs) abrufen, die Sie zum Speichern verwenden.
Da dies jedoch ein unterstützter Anwendungsfall in der "alten" HashMap
war, muss es auch in der Generics-Version unterstützt werden.
Beachten Sie, dass alle Methoden, die keySet()
verwenden, den spezifischen Typ verwenden, da es sicher ist, dass genau die Objekte zurückgegeben werden, die als Schlüssel verwendet werden, wenn put()
aufgerufen wurde.