OVH Cloud OVH Cloud

test de classe

4 réponses
Avatar
yvon.thoravalNO-SPAM
j'ai un arbre qui représente des appellations, cet arbre utilise quatre
classes :

WorldAppellations (c'est le root)
Country
Area (les paths vers les feuilles)
Appellation (les feuiles)

Quand je fais un query sur une Appellation je "remonte" le parent par
son nom et sa classe :

parent.clazz = Area.class

j'ai une méthode qui me retoune cette Class (o.getParentClass(), déjà si
je fais un print :

System.out.println("c.getParentClass() = " + c.getParentClass());

j'obtiens :

c.getParentClass() = class yt.db4o.o.appellations.Country

ça veut dire qu'il y a un "toString()" ajouté implicitement ? ("class"
précède le nom de la classe)

j'ai besoin d'un test d'arrêt quand je remonte cet arbre et que j'arrive
à Country, comment tester une classe ?

j'ai à ma disposition la classe Parent :

public class Parent {
public String name;

public String type;

public Class clazz;

public Parent() {
}
}

avec clazz ayant pour valeurs possibles :

Appellation.class, Area.class, Country.class, WorldAppellations.class
--
yt

4 réponses

Avatar
Jacques Desmazieres
c.getParentClass() = class yt.db4o.o.appellations.Country

ça veut dire qu'il y a un "toString()" ajouté implicitement ? ("class"
précède le nom de la classe)
Oui, car le type Class hérite de Object qui propose une implémentation par

défaut de toString()

j'ai besoin d'un test d'arrêt quand je remonte cet arbre et que j'arrive
à Country, comment tester une classe ?
Si tu dois tester la classe, utilise la méthode isAssignableFrom() de

l'objet classe.

Jacques Desmazieres

Avatar
yvon.thoravalNO-SPAM
Jacques Desmazieres wrote:

Si tu dois tester la classe, utilise la méthode isAssignableFrom() de
l'objet classe.


OK, merci beaucoup, ça me convient tout-à-fait.

Autre question, j'ai des tas d'ArrayList dont le contenu diffère, par
exemple j'ai une ArrayList wines qui contient des vins, une autre soils
qui contient des sols.

ça me pose un pb au niveau de certains constructeurs car ces listes sont
en qq sorte "anonymes" donc je voudrais créer des ArrayList typées du
genre :

public Wines extends ArrayList {blahblahblah}

est-ce que ça marche comme subterfuge ?

càd est-ce que, avec ce genre de workaround, je pourrais créer
différents constructeurs l'un uniquement avec Wines, l'autre uniquement
Soils et enfin l'un ET l'autre, ce que je ne peux pas faire actuellement
avec ArrayList (confusion entre ArrayList wines et ArrayList soils).

en fait je ferai un peu comme des "alias" d'ArrayList
--
yt

Avatar
Jacques Desmazieres
public Wines extends ArrayList {blahblahblah}

est-ce que ça marche comme subterfuge ?
Pas vraiment ;-)


Par contre si tu utilise un JDK 1.5 tu peux utiliser la notion de generics
qui permet de faire cela. Regarde la doc pour la syntaxe, car je ne les ai
pas encore utilisés.

càd est-ce que, avec ce genre de workaround, je pourrais créer
différents constructeurs l'un uniquement avec Wines, l'autre uniquement
Soils et enfin l'un ET l'autre, ce que je ne peux pas faire actuellement
avec ArrayList (confusion entre ArrayList wines et ArrayList soils).

en fait je ferai un peu comme des "alias" d'ArrayList
Tu peux toujours sous-classes ArrayList afin de le typer, ainsi pour ton

constructeur avec wines, tu passes WineList, pour soil, SoilList et pour une
liste non typée, tu passes ArrayList.

voilà

Jacques Desmazieres

Avatar
yvon.thoravalNO-SPAM
Jacques Desmazieres wrote:

Tu peux toujours sous-classes ArrayList afin de le typer, ainsi pour ton
constructeur avec wines, tu passes WineList, pour soil, SoilList et pour une
liste non typée, tu passes ArrayList.


OK, c'est ce que j'ai fait. Merci.
--
yt