Programmez les interfaces!
Map<Temp, ? extends Action> p = new HashMap<Temp, ? extends Action>();
Sa meilleure pratique.
J'ai remarqué que ce n'était peut-être pas répondu correctement. Le problème est expliqué en détail here. Ce qui fonctionnera pour vous est peut-être
Map<Temp, ? super Action> p = new HashMap<Temp, Action>();
Hope that helps.
Troisième édition, je suis nouveau pour écrire des commentaires noter que si ce processus est un exemple de toute façon ici:
public void doSomething()
{
Map<A, ? super A> p = new HashMap<A, A>();
A a1 = new A();
A a2 = new A();
// AS A CONSUMER
// Not a problem because at runtime we'll know we can accept A.
p.put(a1, new B());
p.put(a2, new C());
// AS A PRODUCER
// what do I cast to? No way of knowing if its B or C.
for (Object a : p.values())
{
}
// Same deal as above is it B or C?
p.get(a1);
}
class A{}
class B extends A {}
class C extends B {}
Veuillez reformater. Cela ne s'affiche pas correctement. – jn1kk
N'utilisez pas '<>' autour de '? étend Action ... et vous serez plus près d'avoir raison. –
L'erreur n'est pas dans Java Generics. –