J'ai déclaré une carte qui contient la cartographie des clés de type long à une Nested CarteImpossible de mettre l'objet dans une carte générique
emboîtées Maps a les clés de la classe Type et les valeurs de type SomeClient Fondamentalement, je suis en train de générer un mappage de type de classe vers les clients qui produisent la réponse du type de classe.
private static final Map<Long, Map<Class<? super GenericResponse>, SomeClient<? super GenericResponse>>> someClientMap
= new HashMap<Long, Map<Class<? super GenericResponse>, SomeClient<? super GenericResponse>>>(); // <? super GenericResponse> should enable me to put subclasses of type GenericResponse in the Map
La méthode getSomeClient est une méthode générique qui accepte le type de classe comme argument et renvoie le client qui produit des réponses du type de classe (Le type de classe ne peut être une sous-classe de GenericResponse:. Avis paramètre de type dans la signature de la méthode)
public static <T extends GenericResponse> SomeClient<T> getSomeClient(long clientId,Class<T> clazz) throws IOException {
if (someClientMap.get(clientId) == null) {
synchronized (someClientMap) {
someClientMap.put(clientId, new HashMap<Class<T>,SomeClient<T>>()); //getting error here
}
}
return someClientMap.get(clientId);
}
le problème est que je reçois une erreur de compilation où je suis en train de mettre le client dans la carte.
L'erreur exacte est
The method put(Long, Map<Class<? super GenericResponse>,SomeClient<? super GenericResponse>>) in the type Map<Long,Map<Class<? super GenericResponse>,SomeClient<? super GenericResponse>>> is not applicable for the arguments (long, HashMap<Class<T>,SomeClient<T>>)
J'éprouve des difficultés rappelant ce que je fais exactement je tort. S'il vous plaît aider.
Déclaration pour SomeClient est
public class SomeClient<T extends GenericResponse>
et pour la contructor est
public SomeClient(Class<T> clazz)
On dirait que le problème est dans 'Long' vs' long' - vous mettez un argument 'long', map attend' Long'. Ajouter une conversion ou utiliser la méthode 'Long.valueOf (.)' –
Pourriez-vous poster dans la question la déclaration de 'SomeClient' et' GenericResponse'? –