IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Generics de generics et correspondance de type


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Points : 21
    Points
    21
    Par défaut Generics de generics et correspondance de type
    Bonjour,

    J'ai le morceau de code Java suivant dans lequel j'ai une méthode (getClasses()) qui retourne un ensemble de classes. L'ensemble de classes retourné est en réalité un singleton, construit avec Collections.singleton().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class Machin {
     
    	private Class<?> fClass;
     
    	// ...
     
    	public Set<Class<?>> getClasses() {
    		return Collections.singleton(fClass);
    	}
     
    	// ...
     
    }
    Malheureusement, Java5 et Java6 n'aiment pas et me disent:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Type mismatch: cannot convert from Set<Class<capture#1-of ?>> to Set<Class<?>>
    Savez-vous pourquoi ? Avez-vous une solution pour que ça fonctionne ?

  2. #2
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    edit: tiens marrant j'avais essayé le forcage comme indiqué par Adiguba et j'avais fait une erreur (en spécifiant Set au lieu de Class<T>)... comme quoi il ne faut jamais se dépécher quand on vérifie un code ....

    donc précdente version supprimée
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu tombes dans un des rares cas où le compilateurs n'arrive pas à déterminer le type de la méthode paramétré.

    En fait la méthode singleton() est paramétré et déclaré comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        public static <T> Set<T> singleton(T o) {
    Notes bien le <T> qui précède le type de retour. Cela indique que la méthode est paramétrée (indépendamment de la classe à laquelle elle appartient), et normalement tu devrais préciser explicitement son paramétrage lorsque tu l'utilises, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	public Set<Class<?>> getClasses() {
    		return Collections.<Class<?>>singleton(fClass);
    	}
    Toutefois le compilateur arrive à détecter cela automatiquement dans 95% des cas et ceci est donc optionnel et bien méconnu...


    Malheureusement pour toi tu es tombé dans un cas où le type est mal détecté par le compilateur pour d'obscure raison... et tu es donc obligé de le préciser !


    a++

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Points : 21
    Points
    21
    Par défaut
    Merci pour vos réponses. Les deux méthodes fonctionnent. Toutefois, je vais adopter la méthode d'adiGuba qui me paraît plus élégante.

    Pour ma part, je considère le problème comme étant résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/04/2008, 10h03
  2. A quoi correspond le type mixed ?
    Par sliderman dans le forum Langage
    Réponses: 2
    Dernier message: 24/10/2007, 13h50
  3. correspondance de types "Sybase" "Oracle"
    Par DBA_doom dans le forum Administration
    Réponses: 6
    Dernier message: 22/05/2007, 13h50
  4. Réponses: 4
    Dernier message: 08/02/2006, 15h19
  5. Correspondance de types lors d'un SELECT
    Par Alain Dionne dans le forum ASP
    Réponses: 5
    Dernier message: 18/05/2004, 20h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo