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 :

implementer interface list en généric


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de goldorax113
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2002
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2002
    Messages : 111
    Par défaut implementer interface list en généric
    Bonjour,

    je dois développer une classe ObjectArray qui est une sous classe d'un classe Cluster dont le code est :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    package shiptrafficcontrol;
     
    public class Cluster<E> {
    //@ invariant 0 <= count &&
    //@ (\forall int i,j;
    //@ 0 <= i && i < items.size() && 0 <= j && j < items.size() && i < j;
    //@ (items.get(i) != null && items.get(j) != null) ==> !items.get(i).equals(items.get(j)));
        protected /*@spec_public */ java.util.ArrayList<E> items;
        protected /*@spec_public */ static final int capacity=10;
        protected /*@spec_public */ int count = 0;
     
        /** Creates a new instance of Cluster */
        public Cluster(){
            items = new java.util.ArrayList<E>(capacity);
            count = 0;
        }
     
        public /*@ pure */ boolean contains(E item){
            return items.contains(item);
        }
     
        //@ ensures \result <==> (count == 0);
        public /*@ pure */ boolean isEmpty(){
            return (count == 0);
        }
     
        //@ ensures \result <==> (count == capacity);
        public /*@ pure */ boolean isFull(){
            return (count == capacity);
        }
     
        //@ requires !isEmpty();
        //@ ensures \result == null || items.contains(\result);
        public /*@ pure */ E pickOne(java.util.Random random){
            return items.get(random.nextInt(items.size()));
        }
     
        public /*@ pure */ String toString(){
            return items.toString();
        }
     
    }
    et de plus cette classe ObjectArray doit implementer l'interface java.util.list

    voici ce que j'ai fais:

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    /*
     * ObjectArray.java
     *
     * Created on 13 octobre 2006, 23:57
     *
     * To change this template, choose Tools | Template Manager
     * and open the template in the editor.
     */
     
    package shiptrafficcontrol;
     
     
    import java.util.*;
    /**
     *
     * @author Nicolas
     */
    public class ObjectArray extends Cluster implements List{
     
        /** Creates a new instance of ObjectArray */
        public ObjectArray() {
            super();
        }
     
        //to overide from cluster
     
        //public String toString();
     
        public int size() {
            return items.size();
        }
     
        public Iterator<Object> iterator() {
            return items.iterator();
        }
     
        public Object[] toArray() {
            return(items.toArray());
        }
     
        public boolean add(Object o ) {
            items.add(o);
     
        }
     
        public boolean remove(Object o) {
            return(items.remove(o));
        }
     
        public boolean containsAll(Collection<Object> c ) {
            return(items.containsAll(c));
        }
     
        public boolean addAll(Collection<Object> c ) {
            return(items.addAll(c));
        }
     
        public boolean addAll(int i , Collection<Object> c) {
            return(items.addAll(i,c));
        }
     
        public boolean removeAll(Collection<Object> c ) {
            return(items.removeAll(c));
        }
     
        public void clear() {
            items.clear();
        }
     
        public Object get(int i) {
            return(items.get(i));
        }
     
        public Object set(int i, Object o) {
            return(items.set(i,o));
        }
     
        public void add(int i, Object o) {
            items.add(i,o);
        }
     
        public Object remove(int i) {
            return(items.remove(i));
        }
     
        public int indexOf(Object o) {
            return(items.indexOf(o));
        }
     
        public int lastIndexOf(Object o) {
            return(items.lastIndexOf(o));
        }
     
        public ListIterator<Object> listIterator() {
            return(items.listIterator());
        }
     
        public ListIterator<Object> listIterator(int i) {
            return(items.listIterator(i));
        }
     
        public List<Object> subList(int i, int j) {
            return(items.subList(i,j));
        }
     
        public  Object[] toArray(Object o[]) {
            return(items.toArray(o));
        }
     
        public boolean contains(Object o) {
           return(items.contains(o));
        }
     
        public boolean retainAll(Collection<Object> c ) {
            return(items.retainAll(c));
        }
     
     
     
     
     
    }
    le probleme c'est que je voudrais utiliser un type généric (E) mais des que je remplace Object par "E" ,le compilateur ne trouve pas ce type E, pourtant objectArray est une sous classe de Cluster qui implemente le type E

    de plus j'ai une erreur à la compilation, comme quoi je n'implemente pas tout les méthodes de l'interface, pourtant c'est le cas....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    deps-jar:
    Compiling 7 source files to /Users/Nicolas/Documents/IY/Object & Component Technology/ASSIGNMENTS/ShipTrafficControlSystem/build/classes
    /Users/Nicolas/Documents/IY/Object & Component Technology/ASSIGNMENTS/ShipTrafficControlSystem/src/shiptrafficcontrol/ObjectArray.java:18: shiptrafficcontrol.ObjectArray is not abstract and does not override abstract method retainAll(java.util.Collection) in java.util.List
    public class ObjectArray extends Cluster implements List{
    Note: /Users/Nicolas/Documents/IY/Object & Component Technology/ASSIGNMENTS/ShipTrafficControlSystem/src/shiptrafficcontrol/ObjectArray.java uses unchecked or unsafe operations.
    Note: Recompile with -Xlint:unchecked for details.
    1 error
    BUILD FAILED (total time: 1 second)
    Can you help pliiiiiiiiiise ???



    Nicolas

  2. #2
    Membre chevronné Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Par défaut
    Salut,

    Essaie avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class ObjectArray<E> extends Cluster<E> implements List<E> {
    ...
    }

  3. #3
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu dois spécifier les types paramétré lors de la déclaration de ta classe, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class ObjectArray<E> extends Cluster<E> implements List<E> {
         ...
    }

    A noter également que tu peux spécifier le type "en dur" (dans ce cas ta classe n'est plus générique) :
    [code]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class StringArray extends Cluster<String> implements List<String> {
          ...
     }
    a++

  4. #4
    Membre confirmé Avatar de goldorax113
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2002
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2002
    Messages : 111
    Par défaut
    Merci pour les réponses, je regarde si ça fonctionne, je post dés que j'ai des news.

    merci

  5. #5
    Membre confirmé Avatar de goldorax113
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2002
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2002
    Messages : 111
    Par défaut
    Alors j'ai fais les modif, ça m'a un peu déplacé le probleme

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    /*
     * ObjectArray.java
     *
     * Created on 13 octobre 2006, 23:57
     *
     * To change this template, choose Tools | Template Manager
     * and open the template in the editor.
     */
     
    package shiptrafficcontrol;
     
     
    import java.util.*;
    /**
     *
     * @author Nicolas
     */
    public class ObjectArray<E> extends Cluster<E> implements List<E>{
     
        /** Creates a new instance of ObjectArray */
        public ObjectArray() {
            super();
        }
     
        //to overide from cluster
     
        //public String toString();
     
        public int size() {
            return items.size();
        }
     
        public Iterator<E> iterator() {
            return items.iterator();
        }
     
        public E[] toArray() {
            return(items.toArray());
        }
     
        public boolean add(E o ) {
            items.add(o);
     
        }
     
        public boolean remove(E o) {
            return(items.remove(o));
        }
     
        public boolean containsAll(Collection<E> c ) {
            return(items.containsAll(c));
        }
     
        public boolean addAll(Collection<E> c ) {
            return(items.addAll(c));
        }
     
        public boolean addAll(int i , Collection<E> c) {
            return(items.addAll(i,c));
        }
     
        public boolean removeAll(Collection<E> c ) {
            return(items.removeAll(c));
        }
     
        public void clear() {
            items.clear();
        }
     
        public E get(int i) {
            return(items.get(i));
        }
     
        public E set(int i, E o) {
            return(items.set(i,o));
        }
     
        public void add(int i, E o) {
            items.add(i,o);
        }
     
        public E remove(int i) {
            return(items.remove(i));
        }
     
        public int indexOf(E o) {
            return(items.indexOf(o));
        }
     
        public int lastIndexOf(E o) {
            return(items.lastIndexOf(o));
        }
     
        public ListIterator<E> listIterator() {
            return(items.listIterator());
        }
     
        public ListIterator<E> listIterator(int i) {
            return(items.listIterator(i));
        }
     
        public List<E> subList(int i, int j) {
            return(items.subList(i,j));
        }
     
        public  E[] toArray(E o[]) {
            return(items.toArray(o));
        }
     
        public boolean contains(E o) {
           return(items.contains(o));
        }
     
        public boolean retainAll(Collection<E> c ) {
            return(items.retainAll(c));
        }
     
     
     
     
    }
    les erreurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    init:
    deps-jar:
    Compiling 7 source files to /Users/Nicolas/Documents/IY/Object & Component Technology/ASSIGNMENTS/ShipTrafficControlSystem/build/classes
    /Users/Nicolas/Documents/IY/Object & Component Technology/ASSIGNMENTS/ShipTrafficControlSystem/src/shiptrafficcontrol/ObjectArray.java:18: shiptrafficcontrol.ObjectArray is not abstract and does not override abstract method lastIndexOf(java.lang.Object) in java.util.List
    public class ObjectArray<E> extends Cluster<E> implements List<E>{
    /Users/Nicolas/Documents/IY/Object & Component Technology/ASSIGNMENTS/ShipTrafficControlSystem/src/shiptrafficcontrol/ObjectArray.java:38: incompatible types
    found   : java.lang.Object[]
    required: E[]
            return(items.toArray());
    2 errors
    BUILD FAILED (total time: 4 seconds)
    je ne comprends pas pourquoi le compilateur me dis toujours que je n'ai pas "overridé" une method alors que je l'ai fais....

    Merci

  6. #6
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par goldorax113
    je ne comprends pas pourquoi le compilateur me dis toujours que je n'ai pas "overridé" une method alors que je l'ai fais....
    La méthode lastIndexOf() n'est pas paramétré (pour des raisons de compatibilité), tu ne peux donc pas utiliser E dans sa signature et respecter la signature initiale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        public int lastIndexOf(Object o) {
            return(items.lastIndexOf(o));
        }
    a++

  7. #7
    Membre confirmé Avatar de goldorax113
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2002
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2002
    Messages : 111
    Par défaut
    Merci pour les réponses,

    Comment ça se fait qu'il me dise aussi que la method boolean retainAll(Collection<?> c) soit aussi à overridée, pourtant celle ci accepte les types parametrés ?

    Nicolas

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

Discussions similaires

  1. Interface List : inverser
    Par dword2add dans le forum Général Java
    Réponses: 16
    Dernier message: 07/05/2008, 00h55
  2. je veut une aide sur l'implementation de liste chainee
    Par oussama0013 dans le forum C++
    Réponses: 2
    Dernier message: 11/12/2007, 00h20
  3. Auto implementation Interface
    Par schneidb dans le forum NetBeans
    Réponses: 3
    Dernier message: 14/02/2007, 10h17
  4. [Reflection] Classes implémentant une interface
    Par thibaut dans le forum API standards et tierces
    Réponses: 17
    Dernier message: 29/07/2004, 14h57
  5. Implementation et Interface
    Par Bleys dans le forum Débuter
    Réponses: 5
    Dernier message: 21/06/2004, 14h00

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