bonjour,
Après lecture de
http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
je ne suis toujours pas capable de déboguer la classe Main ci-après.
Grand merci, d'avance, pour votre aide.
// =====================================================================
public abstract class ADescriptor {
private int value;
public int getValue() { return value; }
public void setValue(int value) { this.value = value; }
public void absMethod() {
System.out.println(getClass().getName() + "::absMethod()");
}
}
// =====================================================================
public class MyDescriptor extends ADescriptor {
public void method() {
System.out.println(getClass().getName() + "::method()");
}
}
// =====================================================================
import java.util.ArrayList;
import java.util.List;
public abstract class AGeometry<T extends ADescriptor> {
private List<T> list;
public AGeometry() { list = new ArrayList<T>(); }
public List<T> getList() { return list; }
public void absMethod() {
System.out.println(getClass().getName() + "::absMethod()");
}
}
// =====================================================================
public class MyGeometry<T extends MyDescriptor> extends AGeometry<T> {
public void method() {
System.out.println(getClass().getName() + "::method()");
}
}
// =====================================================================
public class Main {
public static void main(String[] args) {
ADescriptor d = new MyDescriptor();
d.setValue(13);
// mon problème commence ici :
AGeometry<ADescriptor> g = new MyGeometry<MyDescriptor>();
// ce qui précède ne compile pas - tout comme les 2 lignes suivantes :
AGeometry<? extends ADescriptor> gg = new MyGeometry<MyDescriptor>();
gg.getList().add(d);
gg.getList().get(0).method();
// ce que je cherche à faire : manipuler, sans connaître a priori son
// implémentation, une structure générique (abstraite) de type
// AGeometry<ADescriptor>
}
}
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Thomas LEDUC
On Wed, 05 Jul 2006 15:14:40 +0200, Thomas LEDUC wrote:
// ==================================================================== > public class MyGeometry<T extends MyDescriptor> extends AGeometry<T> { public void method() { System.out.println(getClass().getName() + "::method()"); } }
en me relisant (tardivement, j'en conviens), je me rends compte que la classe ci-dessus peut être simplifiée comme suit :
public class MyGeometry extends AGeometry<MyDescriptor> { public void method() { System.out.println(getClass().getName() + "::method()"); } }
je ne suis pour autant toujours pas en mesure d'écrire ce qui suit : AGeometry<ADescriptor> g = new MyGeometry();
et je suis conscient que cela est dû au fait que (page 4 du tutorial de G Bracha) : AGeometry<MyDescriptor> n'hérite pas de AGeometry<ADescriptor> pourtant, parce que je ne connais pas l'implémentation MyDescriptor, c'est bien un AGeometry<ADescriptor> que je souhaite manipuler.
Enfin, déclarer comme suit ne semble pas convenir non plus (même si cela compile) : AGeometry<? extends ADescriptor> gg = new MyGeometry();
On Wed, 05 Jul 2006 15:14:40 +0200, Thomas LEDUC wrote:
// ==================================================================== > public class MyGeometry<T extends MyDescriptor> extends AGeometry<T> {
public void method() {
System.out.println(getClass().getName() + "::method()");
}
}
en me relisant (tardivement, j'en conviens), je me rends compte que la
classe ci-dessus peut être simplifiée comme suit :
public class MyGeometry extends AGeometry<MyDescriptor> {
public void method() {
System.out.println(getClass().getName() + "::method()");
}
}
je ne suis pour autant toujours pas en mesure d'écrire ce qui suit :
AGeometry<ADescriptor> g = new MyGeometry();
et je suis conscient que cela est dû au fait que (page 4 du tutorial de G
Bracha) :
AGeometry<MyDescriptor> n'hérite pas de AGeometry<ADescriptor>
pourtant, parce que je ne connais pas l'implémentation MyDescriptor, c'est
bien un AGeometry<ADescriptor> que je souhaite manipuler.
Enfin, déclarer comme suit ne semble pas convenir non plus (même si cela
compile) :
AGeometry<? extends ADescriptor> gg = new MyGeometry();
On Wed, 05 Jul 2006 15:14:40 +0200, Thomas LEDUC wrote:
// ==================================================================== > public class MyGeometry<T extends MyDescriptor> extends AGeometry<T> { public void method() { System.out.println(getClass().getName() + "::method()"); } }
en me relisant (tardivement, j'en conviens), je me rends compte que la classe ci-dessus peut être simplifiée comme suit :
public class MyGeometry extends AGeometry<MyDescriptor> { public void method() { System.out.println(getClass().getName() + "::method()"); } }
je ne suis pour autant toujours pas en mesure d'écrire ce qui suit : AGeometry<ADescriptor> g = new MyGeometry();
et je suis conscient que cela est dû au fait que (page 4 du tutorial de G Bracha) : AGeometry<MyDescriptor> n'hérite pas de AGeometry<ADescriptor> pourtant, parce que je ne connais pas l'implémentation MyDescriptor, c'est bien un AGeometry<ADescriptor> que je souhaite manipuler.
Enfin, déclarer comme suit ne semble pas convenir non plus (même si cela compile) : AGeometry<? extends ADescriptor> gg = new MyGeometry();
Ploc
Thomas LEDUC wrote:
// ==================================================================== > public class Main { public static void main(String[] args) { ADescriptor d = new MyDescriptor(); d.setValue(13);
// mon problème commence ici : AGeometry<ADescriptor> g = new MyGeometry<MyDescriptor>();
On peut mettre un MyDescriptor dans un AGeometry<ADescriptor>, mais on ne peut pas dire qur MyGeometry<MyDescriptor> est un AGeometry<ADescriptor>. C'est pareil en c++.
Thomas LEDUC wrote:
// ==================================================================== > public class Main {
public static void main(String[] args) {
ADescriptor d = new MyDescriptor();
d.setValue(13);
// mon problème commence ici :
AGeometry<ADescriptor> g = new MyGeometry<MyDescriptor>();
On peut mettre un MyDescriptor dans un AGeometry<ADescriptor>, mais on
ne peut pas dire qur MyGeometry<MyDescriptor> est un AGeometry<ADescriptor>.
C'est pareil en c++.
// ==================================================================== > public class Main { public static void main(String[] args) { ADescriptor d = new MyDescriptor(); d.setValue(13);
// mon problème commence ici : AGeometry<ADescriptor> g = new MyGeometry<MyDescriptor>();
On peut mettre un MyDescriptor dans un AGeometry<ADescriptor>, mais on ne peut pas dire qur MyGeometry<MyDescriptor> est un AGeometry<ADescriptor>. C'est pareil en c++.
Ploc
Ploc wrote:
Thomas LEDUC wrote:
// ==================================================================== >> public class Main { public static void main(String[] args) { ADescriptor d = new MyDescriptor(); d.setValue(13);
// mon problème commence ici : AGeometry<ADescriptor> g = new MyGeometry<MyDescriptor>();
On peut mettre un MyDescriptor dans un AGeometry<ADescriptor>, mais on ne peut pas dire qur MyGeometry<MyDescriptor> est un AGeometry<ADescriptor>. C'est pareil en c++.
Voir page 4 du tutorial "Generics and Subtyping", au tout debut.
Ploc wrote:
Thomas LEDUC wrote:
// ==================================================================== >> public class Main {
public static void main(String[] args) {
ADescriptor d = new MyDescriptor();
d.setValue(13);
// mon problème commence ici :
AGeometry<ADescriptor> g = new MyGeometry<MyDescriptor>();
On peut mettre un MyDescriptor dans un AGeometry<ADescriptor>, mais on
ne peut pas dire qur MyGeometry<MyDescriptor> est un
AGeometry<ADescriptor>.
C'est pareil en c++.
Voir page 4 du tutorial "Generics and Subtyping", au tout debut.
// ==================================================================== >> public class Main { public static void main(String[] args) { ADescriptor d = new MyDescriptor(); d.setValue(13);
// mon problème commence ici : AGeometry<ADescriptor> g = new MyGeometry<MyDescriptor>();
On peut mettre un MyDescriptor dans un AGeometry<ADescriptor>, mais on ne peut pas dire qur MyGeometry<MyDescriptor> est un AGeometry<ADescriptor>. C'est pareil en c++.
Voir page 4 du tutorial "Generics and Subtyping", au tout debut.
Hervé AGNOUX
Je ne sais pas si c'est toujours d'actualité, mais je pense qu'il y a à la base une confusion entre le extends des génériques et le extends des classes.
Peut être pourrais-tu t'inspirer du modèle de déclaration des "enum" :
Class Enum<E extends Enum<E>>
... qui permet une association des deux sens de extends. Tu pourras en trouver les explications à
"How do I decrypt "Enum<E extends Enum<E>>"?" http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#How%20do%20I%20decrypt%20Enum?
ou à
http://chaoticjava.com/?pC
Thomas LEDUC wrote:
bonjour, Après lecture de http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf je ne suis toujours pas capable de déboguer la classe Main ci-après. Grand merci, d'avance, pour votre aide.
// ==================================================================== > public abstract class ADescriptor { private int value; public int getValue() { return value; } public void setValue(int value) { this.value = value; } public void absMethod() { System.out.println(getClass().getName() + "::absMethod()"); } } // ==================================================================== > public class MyDescriptor extends ADescriptor { public void method() { System.out.println(getClass().getName() + "::method()"); } } // ==================================================================== > import java.util.ArrayList; import java.util.List; public abstract class AGeometry<T extends ADescriptor> { private List<T> list; public AGeometry() { list = new ArrayList<T>(); } public List<T> getList() { return list; } public void absMethod() { System.out.println(getClass().getName() + "::absMethod()"); } } // ==================================================================== > public class MyGeometry<T extends MyDescriptor> extends AGeometry<T> { public void method() { System.out.println(getClass().getName() + "::method()"); } } // ==================================================================== > public class Main { public static void main(String[] args) { ADescriptor d = new MyDescriptor(); d.setValue(13);
// mon problème commence ici : AGeometry<ADescriptor> g = new MyGeometry<MyDescriptor>();
// ce qui précède ne compile pas - tout comme les 2 lignes suivantes : AGeometry<? extends ADescriptor> gg = new MyGeometry<MyDescriptor>(); gg.getList().add(d); gg.getList().get(0).method();
// ce que je cherche à faire : manipuler, sans connaître a priori son // implémentation, une structure générique (abstraite) de type // AGeometry<ADescriptor> } }
-- Hervé AGNOUX http://www.diaam-informatique.com
Je ne sais pas si c'est toujours d'actualité, mais je pense qu'il y a à la
base une confusion entre le extends des génériques et le extends des
classes.
Peut être pourrais-tu t'inspirer du modèle de déclaration des "enum" :
Class Enum<E extends Enum<E>>
... qui permet une association des deux sens de extends. Tu pourras en
trouver les explications à
"How do I decrypt "Enum<E extends Enum<E>>"?"
http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#How%20do%20I%20decrypt%20Enum?
ou à
http://chaoticjava.com/?pC
Thomas LEDUC wrote:
bonjour,
Après lecture de
http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
je ne suis toujours pas capable de déboguer la classe Main ci-après.
Grand merci, d'avance, pour votre aide.
// ==================================================================== > public abstract class ADescriptor {
private int value;
public int getValue() { return value; }
public void setValue(int value) { this.value = value; }
public void absMethod() {
System.out.println(getClass().getName() + "::absMethod()");
}
}
// ==================================================================== > public class MyDescriptor extends ADescriptor {
public void method() {
System.out.println(getClass().getName() + "::method()");
}
}
// ==================================================================== > import java.util.ArrayList;
import java.util.List;
public abstract class AGeometry<T extends ADescriptor> {
private List<T> list;
public AGeometry() { list = new ArrayList<T>(); }
public List<T> getList() { return list; }
public void absMethod() {
System.out.println(getClass().getName() + "::absMethod()");
}
}
// ==================================================================== > public class MyGeometry<T extends MyDescriptor> extends AGeometry<T> {
public void method() {
System.out.println(getClass().getName() + "::method()");
}
}
// ==================================================================== > public class Main {
public static void main(String[] args) {
ADescriptor d = new MyDescriptor();
d.setValue(13);
// mon problème commence ici :
AGeometry<ADescriptor> g = new MyGeometry<MyDescriptor>();
// ce qui précède ne compile pas - tout comme les 2 lignes suivantes :
AGeometry<? extends ADescriptor> gg = new MyGeometry<MyDescriptor>();
gg.getList().add(d);
gg.getList().get(0).method();
// ce que je cherche à faire : manipuler, sans connaître a priori son
// implémentation, une structure générique (abstraite) de type
// AGeometry<ADescriptor>
}
}
Je ne sais pas si c'est toujours d'actualité, mais je pense qu'il y a à la base une confusion entre le extends des génériques et le extends des classes.
Peut être pourrais-tu t'inspirer du modèle de déclaration des "enum" :
Class Enum<E extends Enum<E>>
... qui permet une association des deux sens de extends. Tu pourras en trouver les explications à
"How do I decrypt "Enum<E extends Enum<E>>"?" http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#How%20do%20I%20decrypt%20Enum?
ou à
http://chaoticjava.com/?pC
Thomas LEDUC wrote:
bonjour, Après lecture de http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf je ne suis toujours pas capable de déboguer la classe Main ci-après. Grand merci, d'avance, pour votre aide.
// ==================================================================== > public abstract class ADescriptor { private int value; public int getValue() { return value; } public void setValue(int value) { this.value = value; } public void absMethod() { System.out.println(getClass().getName() + "::absMethod()"); } } // ==================================================================== > public class MyDescriptor extends ADescriptor { public void method() { System.out.println(getClass().getName() + "::method()"); } } // ==================================================================== > import java.util.ArrayList; import java.util.List; public abstract class AGeometry<T extends ADescriptor> { private List<T> list; public AGeometry() { list = new ArrayList<T>(); } public List<T> getList() { return list; } public void absMethod() { System.out.println(getClass().getName() + "::absMethod()"); } } // ==================================================================== > public class MyGeometry<T extends MyDescriptor> extends AGeometry<T> { public void method() { System.out.println(getClass().getName() + "::method()"); } } // ==================================================================== > public class Main { public static void main(String[] args) { ADescriptor d = new MyDescriptor(); d.setValue(13);
// mon problème commence ici : AGeometry<ADescriptor> g = new MyGeometry<MyDescriptor>();
// ce qui précède ne compile pas - tout comme les 2 lignes suivantes : AGeometry<? extends ADescriptor> gg = new MyGeometry<MyDescriptor>(); gg.getList().add(d); gg.getList().get(0).method();
// ce que je cherche à faire : manipuler, sans connaître a priori son // implémentation, une structure générique (abstraite) de type // AGeometry<ADescriptor> } }