Edit : Voir post du dessous.
Version imprimable
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:
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:
1
2
3 public interface IntComposéDe<T> { }
Code:
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:
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 ligneCode:
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:
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:
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:
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:
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 :oops:
Est ce que je dois plutot utiliser quelquechose qui ressemble a ca :
?Code: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:
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:
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:
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 typeCitation:
public void ajoutComposant(Compose p)
Cela me metCode:
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éthodeCitation:
cannot 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:
1
2
3
4
5 void ajoutComposant(Page p) { p.c=this; this.cde.add(p); }
Finalement ca compile bien avec
etCode:public class ComposéDe<T extends Compose>
Je sais pas si c'est juste mais je suppose que je dois faire avec ca :PCode:
1
2
3
4
5 void ajoutComposant(T t) { t.c=this; this.cde.add(t); }