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 : comportement anormal ?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut Generics : comportement anormal ?
    Salut,

    Quelqu'un pourrait-il m'expliquer pourquoi m2 ne compile pas alors que m3 compile...?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class TestGenerics {
     
    	static class X {}
    	static class A<T>{}
     
    	public void m1(List<A<? extends X>> list) {}
     
    	public void m2(A<? extends X> a) {
    		m1(Collections.singletonList(a));
    	}
     
    	public void m3(A<? extends X> a) {
    		m1(create(a));
    	}
     
    	private List<A<? extends X>> create(A<? extends X> a) {
    		List<A<? extends X>> list = new ArrayList<A<? extends X>>();
    		list.add(a);
    		return list;
    	}
     
    }
    (que ça soit avec eclipse ou avec javac)

    Message d'erreur avec javac:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TestGenerics.java:16: m1(java.util.List<TestGenerics.A<? extends TestGenerics.X>>) in TestGenerics cannot be applied to (java.util.List<TestGenerics.A<capture#10 of ? extends TestGenerics.X>>)
                    m1(Collections.singletonList(a));
                    ^
    1 error

  2. #2
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    En simplifiant les notations, je viens de comprendre (enfin je crois avoir compris, c'est encore un peu flou), ça fait:
    m1(L<A<? extends X>) ne peut pas être appliqué à
    m1(L<A<capt#10 of ? extends X>)
    Avec singletonList, le ? est capturé...
    Une fois que le ? est capturé, il A<capt> et A<?> ne sont pas le même type, donc on ne peut pas le mettre dans la liste...

    C'est tordu ces "multi-niveaux" (car ce problème n'apparait qu'à partir de 2 niveaux) de generics...

Discussions similaires

  1. Réponses: 6
    Dernier message: 09/12/2007, 22h33
  2. Réponses: 3
    Dernier message: 01/08/2007, 14h15
  3. Comportement anormal de mon code?
    Par PadawanDuDelphi dans le forum Delphi
    Réponses: 3
    Dernier message: 16/01/2007, 13h10
  4. CASE WHEN avec un comportement anormal
    Par damien.sans dans le forum Oracle
    Réponses: 5
    Dernier message: 23/08/2006, 10h03
  5. Comportement anormal de la tabulation sur une DBGrid
    Par fredfred dans le forum Bases de données
    Réponses: 2
    Dernier message: 18/05/2005, 13h23

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