634.1–Programmation/P.Daehne2/2Version2.61–17.04.2015
Notelorsdelacompilation
Aveclesclassesgénériques,onobtientparfoisunnouveautypedemessaged'avertissementlorsdela
compilation:uneNote.Cemessagenoussignalequ'uneopérationdeconversiondetypeuncheckedou
unsafeestprésentedansnotrecode;lecodeestnéanmoinsgénéré.
Note: OldColl.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Cettesituationsurvientlorsqu'onemploieunparameterizedtypeàl'ancienne,c'est‐à‐direqu'onencrée
uneinstancesanspréciserleoulesparamètreseffectifsdetype.LaJVMconsidèrealorscescomposants
commeétantunrawtype,c'est‐à‐direuntypepourlequelaucuneinformationn'estdisponibleà
l'exécutionetpourlequellesconversionsautomatiquementgénéréesàlacompilationpourraientéchouer.
Encompilantavecl'option‐Xlint:unchecked,lecompilateurproduitlemessaged'avertissementsuivant:
OldColl.java:27: warning: [unchecked] unchecked call to add(E) as a
member of the raw type java.util.ArrayList
if (!isIn(x)) {c.add(x);}
^
1 warning
Pourquelecompilateursignaledeserreurs(plutôtquedesNotes)lorsd'unmauvaisusagedestypes
paramétrés,ilfautspécifierl'optiondecompilation:‐Xlint:unchecked.Dèsmaintenant,toutesnos
applicationsserontcompiléesaveccetteoption(dansNetBeans,ilfautspécifiercetteoptiondansles
Propertiesduprojet,compiling).
Ilestpossibleque,danscertainescirconstances,ces«erreurs»soientprévues:
Ilyadescasts(typeguards)nécessairesquinepeuventêtrevérifiésàl’exécution(parceque
l’informationn’existepasdanslebyte‐code);c’estlecasdestype‐guardsavecleparameterizedtype.
Danscecas,lecompilateurproduiraunmessaged’avertissement(etlecodeneserapasgénéré).
L’annotation@SuppressWarnings("unchecked")permetdegérercettesituation.Lorsqu’elle
préfixeuneclasse,uneméthodeouuneinstruction,elleindiquequelecodedelaclasse,méthodeou
instructionesttype‐unsafe.
Exemples:
classAllocation<T>{
@SuppressWarnings("unchecked")
voidm(){
T[]t=(T[])newObject[10];
}//m
}//Allocation
classAllocation<T>{
voidm(){
@SuppressWarnings("unchecked")
T[]t=(T[])newObject[10];
}//m
}//Allocation
Exemplesdemiseenoeuvre
Considéronslediagrammedeclassesuivant:
Implantationàl'ancienne:GestionClasseAncien.zip
ImplantationenemployantlaversionparamétréedesclassesdebibliothèqueArrayListet
Iterator: GestionClasseGen.zip
Implantationd'ungroupequelconqued'objets;miseenœuvreavecdesEtudiantsetdesVoitures:
GestionGroupes.zip