Edit : Voir post du dessous.
Edit : Voir post du dessous.
J'ai vraiment besoin d'aide, j'ai pu avancer un peu mais je me confronte a des soucis d'instanciation.J'ai une classe ComposéDeCompose qui hérite de ComposéDe et de Compose, dans mon cas, j'ai a la base un document qui est composé de Page(s), Pages qui sont composés de paragraphes et qui composent un Document, etc, jusqu'au mot.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public class ComposéDeCompose<T1,T2> extends Compose implements IntComposéDe { protected ComposéDe C; ComposéDeCompose(T2 t) { super(t); C.cde=new LinkedList<T1>(); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public interface IntComposéDe<T> { }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public class Compose<T> { protected T c; Compose(T t) { c=t; } }Dans un premiers temps, lorsque je crée un document sans argument, cela doit logiquement créer la première page page, qui elle meme crée le premier paragraphe, puis la première ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public class ComposéDe<T> { protected LinkedList<T> cde; ComposéDe() { cde=new LinkedList<T>(); } }
Je reprends le meme schéma jusqu'a ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public class Document extends ComposéDe<Page>{ Document() throws Exception { super(); // Je crée mon document comme Liste de pages Page p=new Page(this); // Je crée la première page this.cde.add(p); // et la met a la première place } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public class Page extends ComposéDeCompose<Paragraphe,Document>{ Page(Document t2) throws Exception { super(t2); Paragraphe p=new Paragraphe(this); C.cde.add(p); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public class Paragraphe extends ComposéDeCompose<Ligne,Page>{ Paragraphe(Page p) { super(p); Ligne l=new Ligne(this); C.cde.add(l); } }Et dans le main, lorsque je crée une novueau document avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public class Ligne extends ComposéDeCompose<Mot,Paragraphe>{ Ligne(Paragraphe p) { super(p); } }
Cela me met null, et avant cela j'avais 4 lignes d'exception avec Null.pointer.Exception
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public static void main(String[] args) { // TODO code application logic here try{ Document d=new Document(); } catch(Exception e) { System.out.println(e.getMessage()); }
Really need help, j'ai du mal avec les exception et débute a peine avec la généricité, thanks
Est ce que je dois plutot utiliser quelquechose qui ressemble a ca :
?
Code : Sélectionner tout - Visualiser dans une fenêtre à part public class Compose<Collection < ? extends T > T1>
Ça serait mieux de mettre la StackTrace, qui permettrait d'identifier directement d'où vient l'erreur plutôt que de devoir lire tout le code et essayer d'en déduire d'où vient l'erreur.
Cela dit, ici, tu as :
La donnée membre C n'est pas initialisée. Donc quand tu fais C.cde, tu as un NullPointerException (tu essayes d'accéder à une donnée d'un objet non instancié).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public class ComposéDeCompose<T1,T2> extends Compose implements IntComposéDe { protected ComposéDe C; ComposéDeCompose(T2 t) { super(t); C.cde=new LinkedList<T1>(); }
Note aussi que tu devrais probablement simplifier ta structure, et faire transiter tes types :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public class ComposéDeCompose<T1,T2> extends Compose<T2> implements IntComposéDe<T1> {
Ah oui, c'était bien ca merci beaucoup, j'ai remplacé donc par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 ComposéDeCompose(T2 t) { super(t); C=new ComposéDe(); } ComposéDeCompose(LinkedList<T1> t1, T2 t2) { super(t2); C=new ComposéDe(t1); } }
Je bloque maintenant sur l'ajout de Composant dans la classe générique, ca marche lorsque je crée une méthode directement dans les classes la syntaxe pose problème dans la classe ComposéDe<T>
Je dois avois la méthode suivante :
C'est donc du typepublic void ajoutComposant(Compose p)
Cela me met
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public void ajoutComposant(Compose p) { p.c=this; // p compose l'élément courant this.cde.add(p); // auquel je dois l'ajouter a la fin de la LinkedList }
C'est la généricité que je n'arrive pas trop a comprendre, dans document par exemple, pas de soucis avec une méthodecannot find symbol
symbol: method add(document.Compose)
location: class java.util.LinkedList<T>
Avec une methode description je vois bien que c'est ajouté au document.J'imagine que cela doit venir de "Compose p" mais c'est la syntaxe qui m'est demandé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void ajoutComposant(Page p) { p.c=this; this.cde.add(p); }
Finalement ca compile bien avec
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part public class ComposéDe<T extends Compose>
Je sais pas si c'est juste mais je suppose que je dois faire avec ca
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void ajoutComposant(T t) { t.c=this; this.cde.add(t); }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager