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 :

generic et heritage


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 45
    Points : 35
    Points
    35
    Par défaut generic et heritage
    Bonjour ,

    ce n'est pas vraiment un problème mais plus un soucie du détail.

    j'ai 2 classes abstraites A et B. La classe A contient un objet B.
    le problème c'est qu'une classe fille de A est associer une classe fille de B. la solution les generics
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public abstract class A <E extends B>{
     
    private E monObjetB;
     
    public E getNomObjetB(){return nomObjetB;}
    }
    soit B1 un classe fille de B  
     
    public class A1<B1>{}
    cela marche très bien mais quand je veux mettre un objet A dans un autre objet, j'ai un warning avec eclipse car je n'ajouter pas le type de A

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class Toto{
     
    private A monA; // A is a raw type. A to generic type A<E> should be parameterized	
    }
    idem pour les méthode la solution mettre des @SuppressWarnings("unchecked") mais bon c'est caché le problème.

    Est un erreur de conception de ma part ? ou ca derange vrai qu'une classe abstraite (donc ininstanciable ) ne soit pas typé ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut
    A est un type générique, il a un paramètre générique, donc il faut le préciser quand tu déclares ton attribut de type A
    Un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class Toto{
     
    private A<MonType> monA;
    }
    Devrait aller

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    oui ca je le sais très bien c'est ce que je ferai si A n'était pas abstrait.
    mais dans mon cas A est abstrait donc je peut pas déterminé de quelle sous classe de B je vais avoir besoin

    attention c'est un pure exemple je sais que ca ne reflète pas la réalité
    c'est comme si j'avais une class abstraite Vehicule<E extends Permis> et une classe abstraite Permis
    les voitures(class Voiture<PermisB>) ont besoin d'un Permis B et les camions d'un Permis poids lourds (class Camion<PermisPoidsLourds>)

    dans un parking je peux mettre des véhicules peu m'importe leur permis.
    Donc je vois pas pourquoi je suis obligé de précisé le permis vu que je sais pas quelle type de véhicule il s'agit

  4. #4
    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 as plusieurs solutions qui dépendent de ton besoin :




    a++

  5. #5
    Invité
    Invité(e)
    Par défaut
    Essaie de déclarer A comme cela : A<?>

    Je me demande aussi si c'est pas possible de dire A<B> (après tu insères un objet B1 ou B2 au choix).

    Edit : Je viens de voir la réponse d'adiGuba, mieux construite (et mieux renseignée) que la mienne. Du coup j'ai une question moi aussi. Quelle est la différence entre la déclaration A<B> et A<? extends B> ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    ca je sais
    avec A<B> tu ne peux pas faire = new A1<B1>()

  7. #7
    Invité
    Invité(e)
    Par défaut
    Effectivement, mais je ne comprends pas pourquoi...

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    merci adiGuba pour ta réponse mais comme je travaille avec Spring et que c'est lui qui instancie Toto ca va etre plus dure
    je crois que je vais laissez mes @SuppressWarnings("unchecked")
    car cela ne gene pas mon programme

    ne ten fais pas kei2906 tu n'es pas le seul.

Discussions similaires

  1. heritage des contraintes
    Par krimson dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 30/04/2004, 12h04
  2. [Kylix] heritage multiple et interfaces :(
    Par le_barbu dans le forum EDI
    Réponses: 4
    Dernier message: 26/01/2004, 19h30
  3. [Postgres] Pb d'heritage...
    Par anonia dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 23/08/2003, 22h34
  4. [HERITAGE] Redondance ou pas redondance ???
    Par cyrillus76 dans le forum Schéma
    Réponses: 1
    Dernier message: 11/06/2003, 09h46
  5. [PostgreSQL] Question vis a vis de l'heritage...
    Par Gandalf dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 12/05/2003, 16h53

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