JAV[ArrayList]
Fermé
MAX
-
8 févr. 2005 à 21:30
choubaka Messages postés 39407 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 9 décembre 2024 - 11 févr. 2005 à 08:28
choubaka Messages postés 39407 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 9 décembre 2024 - 11 févr. 2005 à 08:28
A voir également:
- JAV[ArrayList]
- Unable to access jarfile C:\Program Files\jav ✓ - Forum Windows
1 réponse
choubaka
Messages postés
39407
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
9 décembre 2024
2 104
8 févr. 2005 à 22:46
8 févr. 2005 à 22:46
Salut
c'est tout simple ...
i.next() te renvoie un objet courant dans la liste ...
le problème est qu'il faut désigner de quel type est cet objet ...
d'où le fait de signaler "Compte" entre parenthèses pour signaler que l'objet est du type "Compte", c'est ce que l'on appelle en Java le "Casting".
c'est tout simple ...
i.next() te renvoie un objet courant dans la liste ...
le problème est qu'il faut désigner de quel type est cet objet ...
d'où le fait de signaler "Compte" entre parenthèses pour signaler que l'objet est du type "Compte", c'est ce que l'on appelle en Java le "Casting".
9 févr. 2005 à 00:51
je vous rmerci sur ces clarifications claires et cibliées.
Cependant j'ai encor un petit souci:
Vous m'avez dit que la fonction i.next() me renvoie un objet courant dans la liste qu'il peut être de type Compte ou CompteEpargne, et le probleme reside dans le fait qu'il faut désigner de quel type appartien cet objet, d'ou interet de le transtyper, d'où le fait de signaler "Compte" entre parenthèses pour signaler que l'objet est du type "Compte".
Mais si est le cas :
1-c'est quoi le rôle du reste du corps c'est a dire:
( cpt instanceof CompteEpargne )
2-Si l'objet courant envoyé par la methode i.next() n'est pas de nature ou d'origine Compte, est -il possible de le caster en Compte??
3- est ce que le compilateur doit verifier avant de transtyper un objet la possibilité de transtypage?
Merci de bien vouloir repondre a mes bêtes questions.
Max.
9 févr. 2005 à 01:13
2- c ce que fait (Compte)i.next() .... non
3- oui il le verifie sinon il leve une exception de type ClassCastException
Av pluch
9 févr. 2005 à 06:12
Mais la question que j'aimrai poser est la suivante:
pourquoi on cast l'objet courant envoyé par la methode next () en faisant : (Compte)i.next() avant de ferifier la possibilité de ce transtypage, car il est possible que cet objet ne désigne pas un objet de nature (dorigine) Compte, ou il ne paut etre en aucun cas un Compte.
Moi je trouve qu'en faisant la commende: (Compte)i.next() , on force le compilateur à traiter l'objet courant comme etant un compte, maime si ce n'est pas le cas.
Moi je pensse que la solution doit etre :
public void calculeInteret()
{
for ( Iterator i = listeCompte.iterator () ; i.hasNext () ; )
{
Compte cpt ;
if ( cpt instanceof CompteEpargne )
( ( CompteEpargne) cpt) .calculeInteret();
}
}
1-Comment trouvez vous cette propsition?
2-C'est quoi votre remarque ?
3-Cette solution est elle admissible? sinon pourquoi?
Merci infiniment.
9 févr. 2005 à 10:27
2. parce qu'aucun objet n'a été retiré de la liste, tu te contentes de faire voyager ton itérateur et le casting me paraît douteux ..
3. En général, le programmeur qui utilise des structures de données telles que les arraylist sait quand même ce qu'il y a de stocké dedans. On peut certainement faire jour l'héritage des classe mais on ne peut pas se contenter d'y mettre des objets génériques.
11 févr. 2005 à 05:36
Ma derniere question que je vous pose, si vous acceptez, est la suivante:
Si par exemple nous avons une liste dynamique constutiée des objets d'origines de types Compte, CompteEpargne et Personne, cachant que la classe personne n'herite pas de Compte ni de compteEpargne, la question est : est-ce-que la precedente solution est toujours admissible et correcte pour la nouvelle situation ?
Je vous reppel que la solution est la suivante:
public void calculeInteret()
{
for ( Iterator i = listeCompte.iterator () ; i.hasNext () ; )
{
Compte cpt ;
cpt = ((Compte)i.next ());
if ( cpt instanceof CompteEpargne )
( ( CompteEpargne) cpt) .calculeInteret();
}
}
Cette solution est-elle admissible pour ce nouveau contexte?
Sinon pourquoi?
Mercci d'avanc.