Bonjour,
Je pense que je vieillis ...
En guise d'objet à données d'entrées pour mon programme, j'ai de grandes arrays à plusieurs types d'éléments, du genre :
Soit des arrays imbriquées, de longueurs d'éléments variables et de types d'éléments différents.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 final static Object[] formTarif_Belgacom = { new Object[] { FormTarif_Libellés_0903.get_FormTarif_Libellés(), // static new String( "<html><font color=green>Belgacom</font></html>" ), new Object[] { new String( "2010 mai" ), new String( "2010 mei" ) }, null, null, new BigDecimal( 2.345 ), new BigDecimal( 1.234 ) }, // Ensemble de données tarifaires propres au 10 oct. new Object[] // [0] : 2010 Mai { new Object[] // District A { new Object[] // { new Object[] // Aanbod { new Object[] { new String( "Contrat de 1 an" ), new String( "1 jaar contract" ) }, new Boolean(Prix.indexés.enBooléen()), new Object[] { new Object[] { null, new Object[] // [0] : Normaal { new BigDecimal( 50.00 ), new BigDecimal( 9.91 ) }, new Object[] // [1] { new BigDecimal( 50.00 ), new BigDecimal( 12.89 ), new BigDecimal( 5.69 ) }, new Object[] // [2] { new BigDecimal( 50.00 ), new BigDecimal( 4.88 ) } } } } }, new Object[] // Contributions { new BigDecimal( 0.303 ) ...
J'ai aussi une très grande fonction réentrante ajoutant des Strings de libellés à chaque élément de ces objets de données d'entrée, en supprimant certains éléments, ... du genre :
Une douzaine de lignes avant la fin, observez le code problématique
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110 private ArrayList<Object> assocLibellésAuxItemsDonnées(Object[] chaîneSource) { byte nbreEléments = (byte) chaîneSource.length; // Pas de multiples threads d'accès ni de modification structurelle. ArrayList<Object> chaîneCible = new ArrayList<Object>(nbreEléments); Object descendant = null; boucleExtérieure: for (int index = 0; index < nbreEléments; index++) { // Ajout du String se trouvant dans le fichier de libellés. // Object car élément est de type String, Boolean, Object[], BigDecimal ou null Object élément = chaîneSource[index]; // ifs et switch-cases imbriqués de ±5.600 lignes ! if (élément instanceof String) { switch (nivRéentr[1]) { case 0: // nivRéentr[1] // Il n'y a pas de String à ce niveau 0. break; case 1: // nivRéentr[1] switch (indexCheminArbor[0]) { case 0: // indexCheminArbor[0] / nivRéentr[1]=1 // Données identiques pour tous les sous-ensembles inclus dans l'Object indexCheminArbor[0] = 1. switch (indexCheminArbor[1]) { case 0: // indexCheminArbor[1] / nivRéentr[1]=3 / indexCheminArbor[0]=0 // FormTarif_Libellés_YYMM break; case 1: // indexCheminArbor[1] / nivRéentr[1]=3 / indexCheminArbor[0]=0 // <html><font color=green>Belgacom</font></html> dénomFournis = (String) élément; // Libellé déjà fourni en première position dans chaque 'new Object[]' de 'SommaireFormTarif_ComposTarif_YYMM'. continue boucleExtérieure; case 2: // Au cas où String unique (pas Object de deux strings de deux langues. // Mois d'application du tarif - "2010 mai" moisDApplication = (String) élément; break; case 3: // indexCheminArbor[1] / nivRéentr[1]=3 / indexCheminArbor[0]=0 // Dénominations de formules tarifaires et les statuts formTarif_DénomDsFichDEntrée[0] = (String) élément; break; case 4: // indexCheminArbor[1] / nivRéentr[1]=3 / indexCheminArbor[0]=0 // Dénominations de formules tarifaires et les statuts break; case 5: // indexCheminArbor[1] / nivRéentr[1]=3 / indexCheminArbor[0]=0 break; case 6: // indexCheminArbor[1] / nivRéentr[1]=3 / indexCheminArbor[0]=0 break; default: // indexCheminArbor[1] / nivRéentr[1]=3 / indexCheminArbor[0]=0 break; } break; case 1: // indexCheminArbor[0] / nivRéentr[1]=1 // Ensemble de données tarifaires propres au YYMM. // Il n'y a pas de String à ce niveau indexCheminArbor[0]=1. break; default: // indexCheminArbor[0] / nivRéentr[1]=0 break; } break; case 2: // nivRéentr[1] switch (indexCheminArbor[0]) { case 0: // indexCheminArbor[0] / nivRéentr[1]=2 ... if (élément instanceof Object) { switch (nivRéentr[1]) { case 0: // nivRéentr[1] switch (indexCheminArbor[0]) { case 0: // indexCheminArbor[0] / nivRéentr[1]=0 // Entrer dans l'Object '0' de nivRéentr[1]=0 : break; case 1: // indexCheminArbor[0] / nivRéentr[1]=0 // Ensemble de données tarifaires propres au YYMM. // Entrer dans l'Object '1' de nivRéentr[1]=0. break; default: // indexCheminArbor[0] / nivRéentr[1]=0 break; } break; case 1: // nivRéentr[1] switch (indexCheminArbor[0]) { case 0: // indexCheminArbor[0] / nivRéentr[1]=1 // Entré dans l'objet '0' de nivRéentr[1]=0. // Données identiques pour tous les sous-ensembles inclus dans le 2e Object. switch (indexCheminArbor[1]) { case 0: // indexCheminArbor[1] / nivRéentr[1]=1 / indexCheminArbor[0]=0 // Référence vers 'FormTarif_Libellés_1003' formTarif_Libellés = (Object[]) élément; // élément.get_FormTarif_Libellés(); chaîneCible.ensureCapacity(nbreEléments + 70); // Pour tous les libellés à ajouter. nivRéentr[0] = nivRéentr[1]; indexCheminArbor[nivRéentr[1]]++; // Ne pas créer l'Object 'FormTarif_Libellés_1003'. continue boucleExtérieure; case 2: // indexCheminArbor[1] / nivRéentr[1]=1 / indexCheminArbor[0]=0 // Libellé en deux langues : '2010 mai' toujours en un Object de 2 strings. élément = (String) chaîneSource[index][0]; break; case 3: // indexCheminArbor[1] / nivRéentr[1]=1 / indexCheminArbor[0]=0 // Dénomination de la formule tarifaire en 2 strings bilingues. break; case 4: // indexCheminArbor[1] / nivRéentr[1]=1 / indexCheminArbor[0]=0 // Statuts d'indexation break; case 8: // indexCheminArbor[1] / nivRéentr[1]=1 / indexCheminArbor[0]=0 // nbreElem_lim = (BigDecimal[])((Object[])((Object[])formTarif_Données[0])[8]).length; break; default: // indexCheminArbor[1] / nivRéentr[1]=1 / indexCheminArbor[0]=0 break; } break; case 1: // indexCheminArbor[0] / nivRéentr[1]=1En mode de déboguage (en NetBeans), j'observe que l'array "new Object[]" est initialisé comme il se doit avecélément = (String) chaîneSource[index][0];Pour mettre en 'élément' l'une des deux valeurs de cette array initialisée, comment dois-je formuler mon code ? Le compilateur-life rouspète :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 { new String( "2010 mai" ), new String( "2010 mei" ) },Remerciements anticipés."Array required; but java.lang.Object found"
Partager