HashMap
nicht implementiert Ihre Schnittstelle IParams
, so dass Sie nicht ein HashMap
zu einem IParams
gegossen. Dies hat nichts mit Generika zu tun.
IParams
und HashMap
sind "Geschwister", in dem Sinne, dass beide implementieren oder zu erweitern Map
. Aber das bedeutet nicht, dass Sie eine HashMap
so behandeln können, als wäre es eine IParams
. Angenommen, Sie würden eine Methode zu Ihrer IParams
Schnittstelle hinzufügen.
public interface IParams extends Map<String, String> {
void someMethod();
}
Ofcourse, someMethod
existiert nicht in HashMap
. Wenn das Umwandeln von HashMap
zu IParams
funktionieren würde, was würden Sie erwarten, wenn Sie versuchen würden, die Methode aufzurufen?
IParams params = (IParams) new HashMap<String,String>();
// What's supposed to happen here? HashMap doesn't have someMethod.
params.someMethod();
Im Hinblick auf Ihren Kommentar:
Die Absicht ist, eine Schnittstelle zu schaffen, die die Generika versteckt, und auch Mapkey String Definitionen
(im Beispiel nicht gezeigt) zu halten
Was Sie tun können, ist eine Klasse, die IParams
implementiert und erweitert HashMap
:
public class Params extends HashMap<String, String> implements IParams {
// ...
}
IParams params = new Params();
Sie ist nicht Generika Missverständnis, sind Missverständnisse Sie die Vererbung . – Marcelo
Irgendwelche Gründe, Karte zu erweitern? Überschreiben Sie irgendwelche Methoden? – kosa
Die Absicht ist es, eine Schnittstelle zu erstellen, die die Generics verbirgt und auch (nicht im Beispiel gezeigt) die Schlüsseldefinitionen der Map-Schlüssel enthält. –