HashMap
non implementa l'interfaccia IParams
, quindi non si può gettare un HashMap
a un IParams
. Questo non ha nulla a che fare con i generici.
IParams
e sono "fratelli", nel senso che entrambi implementano o estendono Map
. Ma questo non significa che puoi trattare un HashMap
come se fosse un IParams
. Supponiamo che tu aggiunga un metodo all'interfaccia IParams
.
public interface IParams extends Map<String, String> {
void someMethod();
}
Naturalmente, someMethod
non esiste in HashMap
. Se la trasmissione di un numero da HashMap
a IParams
funzionerebbe, cosa ti aspetteresti che accada se tentassi di chiamare il metodo?
IParams params = (IParams) new HashMap<String,String>();
// What's supposed to happen here? HashMap doesn't have someMethod.
params.someMethod();
Per quanto riguarda il tuo commento:
L'intento è quello di creare un'interfaccia che nasconde i farmaci generici, e anche per tenere (non mostrato nell'esempio) mappare le definizioni stringa chiave
che cosa si potrebbe fare è creare una classe che implementa IParams
ed estende HashMap
:
public class Params extends HashMap<String, String> implements IParams {
// ...
}
IParams params = new Params();
Non sei malinteso farmaci generici, si sta Misunderstanding eredità . – Marcelo
Qualche motivo per estendere la mappa? Stai ignorando qualsiasi metodo? – kosa
L'intenzione è quella di creare un'interfaccia che nasconda i generici, e anche di mantenere (non mostrato nell'esempio) le definizioni delle stringhe chiave della mappa –