[{"data":1,"prerenderedAt":1288},["ShallowReactive",2],{"page-\u002Fjava\u002Fcollections-generiques-exceptions":3,"pieces-java":1246,"autour-\u002Fjava\u002Fcollections-generiques-exceptions":1271,"prerequis-\u002Fjava\u002Fcollections-generiques-exceptions":1275,"plan-java":1277},{"id":4,"title":5,"body":6,"description":1209,"extension":1210,"ligne":71,"meta":1211,"motsCles":1212,"navigation":101,"niveau":1215,"path":1216,"prerequis":1217,"ressources":1219,"seo":1231,"sources":1232,"stem":1244,"__hash__":1245},"docs\u002Fjava\u002F06.collections-generiques-exceptions.md","Collections, génériques et exceptions",{"type":7,"value":8,"toc":1199},"minimark",[9,14,51,55,66,229,238,252,256,269,490,510,558,562,574,581,668,678,682,688,804,807,826,833,837,847,913,940,960,964,974,1119,1133,1149,1153,1195],[10,11,13],"h2",{"id":12},"ce-que-tu-vas-apprendre","Ce que tu vas apprendre",[15,16,17,30,37],"ul",{},[18,19,20,21,25,26,29],"li",{},"Utiliser ",[22,23,24],"code",{},"List"," et ",[22,27,28],{},"Map"," à la place des tableaux.",[18,31,32,33,36],{},"Comprendre les génériques et la notation ",[22,34,35],{},"List\u003CString>",".",[18,38,39,40,43,44,47,48,36],{},"Gérer les erreurs avec ",[22,41,42],{},"try",", ",[22,45,46],{},"catch"," et modéliser des cas avec ",[22,49,50],{},"sealed",[10,52,54],{"id":53},"list-une-liste-qui-grandit","List : une liste qui grandit",[56,57,58,59,63,64,36],"p",{},"Une ",[60,61,62],"strong",{},"collection"," est un objet qui range d'autres objets et dont la taille peut varier. La plus courante est la ",[22,65,24],{},[67,68,73],"pre",{"className":69,"code":70,"language":71,"meta":72,"style":72},"language-java shiki shiki-themes github-light-default github-dark-default github-dark-default","import java.util.ArrayList;\nimport java.util.List;\n\nList\u003CString> courses = new ArrayList\u003C>();\ncourses.add(\"farine\");\ncourses.add(\"lait\");\ncourses.remove(\"lait\");\n\nSystem.out.println(courses.size()); \u002F\u002F 1\nSystem.out.println(courses.get(0)); \u002F\u002F farine\n","java","",[22,74,75,88,96,103,130,150,164,178,183,205],{"__ignoreMap":72},[76,77,80,84],"span",{"class":78,"line":79},"line",1,[76,81,83],{"class":82},"sOnC1","import",[76,85,87],{"class":86},"scfrF"," java.util.ArrayList;\n",[76,89,91,93],{"class":78,"line":90},2,[76,92,83],{"class":82},[76,94,95],{"class":86}," java.util.List;\n",[76,97,99],{"class":78,"line":98},3,[76,100,102],{"emptyLinePlaceholder":101},true,"\n",[76,104,106,108,112,115,118,121,124,127],{"class":78,"line":105},4,[76,107,24],{"class":86},[76,109,111],{"class":110},"sIXEE","\u003C",[76,113,114],{"class":82},"String",[76,116,117],{"class":110},"> ",[76,119,120],{"class":86},"courses",[76,122,123],{"class":82}," =",[76,125,126],{"class":82}," new",[76,128,129],{"class":86}," ArrayList\u003C>();\n",[76,131,133,136,140,143,147],{"class":78,"line":132},5,[76,134,135],{"class":86},"courses.",[76,137,139],{"class":138},"syCW7","add",[76,141,142],{"class":86},"(",[76,144,146],{"class":145},"shWOn","\"farine\"",[76,148,149],{"class":86},");\n",[76,151,153,155,157,159,162],{"class":78,"line":152},6,[76,154,135],{"class":86},[76,156,139],{"class":138},[76,158,142],{"class":86},[76,160,161],{"class":145},"\"lait\"",[76,163,149],{"class":86},[76,165,167,169,172,174,176],{"class":78,"line":166},7,[76,168,135],{"class":86},[76,170,171],{"class":138},"remove",[76,173,142],{"class":86},[76,175,161],{"class":145},[76,177,149],{"class":86},[76,179,181],{"class":78,"line":180},8,[76,182,102],{"emptyLinePlaceholder":101},[76,184,186,189,192,195,198,201],{"class":78,"line":185},9,[76,187,188],{"class":86},"System.out.",[76,190,191],{"class":138},"println",[76,193,194],{"class":86},"(courses.",[76,196,197],{"class":138},"size",[76,199,200],{"class":86},"()); ",[76,202,204],{"class":203},"sd6ml","\u002F\u002F 1\n",[76,206,208,210,212,214,217,219,223,226],{"class":78,"line":207},10,[76,209,188],{"class":86},[76,211,191],{"class":138},[76,213,194],{"class":86},[76,215,216],{"class":138},"get",[76,218,142],{"class":86},[76,220,222],{"class":221},"s5iOY","0",[76,224,225],{"class":86},")); ",[76,227,228],{"class":203},"\u002F\u002F farine\n",[56,230,231,233,234,237],{},[22,232,24],{}," est l'interface, ",[22,235,236],{},"ArrayList"," la classe qui l'implémente. On déclare le type avec l'interface et on crée avec la classe : le reste du code ne dépend pas du choix.",[56,239,240,241,244,245,248,249,251],{},"Pour une liste fixe, ",[22,242,243],{},"List.of(\"a\", \"b\")"," crée une liste ",[60,246,247],{},"non modifiable"," : un ",[22,250,139],{}," lève alors une exception.",[10,253,255],{"id":254},"map-des-paires-clé-et-valeur","Map : des paires clé et valeur",[56,257,58,258,260,261,264,265,268],{},[22,259,28],{}," associe une ",[60,262,263],{},"clé"," à une ",[60,266,267],{},"valeur",", comme un index.",[67,270,272],{"className":69,"code":271,"language":71,"meta":72,"style":72},"import java.util.HashMap;\nimport java.util.Map;\n\nMap\u003CString, Integer> duree = new HashMap\u003C>();\nduree.put(\"Crêpes\", 20);\nduree.put(\"Cassoulet\", 180);\n\nSystem.out.println(duree.get(\"Crêpes\"));              \u002F\u002F 20\nSystem.out.println(duree.getOrDefault(\"Pizza\", 0));   \u002F\u002F 0\n\nfor (Map.Entry\u003CString, Integer> e : duree.entrySet()) {\n    System.out.println(e.getKey() + \" : \" + e.getValue());\n}\n",[22,273,274,281,288,292,317,337,355,359,380,406,410,449,484],{"__ignoreMap":72},[76,275,276,278],{"class":78,"line":79},[76,277,83],{"class":82},[76,279,280],{"class":86}," java.util.HashMap;\n",[76,282,283,285],{"class":78,"line":90},[76,284,83],{"class":82},[76,286,287],{"class":86}," java.util.Map;\n",[76,289,290],{"class":78,"line":98},[76,291,102],{"emptyLinePlaceholder":101},[76,293,294,296,298,300,302,305,307,310,312,314],{"class":78,"line":105},[76,295,28],{"class":86},[76,297,111],{"class":110},[76,299,114],{"class":82},[76,301,43],{"class":110},[76,303,304],{"class":82},"Integer",[76,306,117],{"class":110},[76,308,309],{"class":86},"duree",[76,311,123],{"class":82},[76,313,126],{"class":82},[76,315,316],{"class":86}," HashMap\u003C>();\n",[76,318,319,322,325,327,330,332,335],{"class":78,"line":132},[76,320,321],{"class":86},"duree.",[76,323,324],{"class":138},"put",[76,326,142],{"class":86},[76,328,329],{"class":145},"\"Crêpes\"",[76,331,43],{"class":86},[76,333,334],{"class":221},"20",[76,336,149],{"class":86},[76,338,339,341,343,345,348,350,353],{"class":78,"line":152},[76,340,321],{"class":86},[76,342,324],{"class":138},[76,344,142],{"class":86},[76,346,347],{"class":145},"\"Cassoulet\"",[76,349,43],{"class":86},[76,351,352],{"class":221},"180",[76,354,149],{"class":86},[76,356,357],{"class":78,"line":166},[76,358,102],{"emptyLinePlaceholder":101},[76,360,361,363,365,368,370,372,374,377],{"class":78,"line":180},[76,362,188],{"class":86},[76,364,191],{"class":138},[76,366,367],{"class":86},"(duree.",[76,369,216],{"class":138},[76,371,142],{"class":86},[76,373,329],{"class":145},[76,375,376],{"class":86},"));              ",[76,378,379],{"class":203},"\u002F\u002F 20\n",[76,381,382,384,386,388,391,393,396,398,400,403],{"class":78,"line":185},[76,383,188],{"class":86},[76,385,191],{"class":138},[76,387,367],{"class":86},[76,389,390],{"class":138},"getOrDefault",[76,392,142],{"class":86},[76,394,395],{"class":145},"\"Pizza\"",[76,397,43],{"class":86},[76,399,222],{"class":221},[76,401,402],{"class":86},"));   ",[76,404,405],{"class":203},"\u002F\u002F 0\n",[76,407,408],{"class":78,"line":207},[76,409,102],{"emptyLinePlaceholder":101},[76,411,413,416,419,421,424,426,428,430,432,434,437,440,443,446],{"class":78,"line":412},11,[76,414,415],{"class":82},"for",[76,417,418],{"class":86}," (Map",[76,420,36],{"class":110},[76,422,423],{"class":86},"Entry",[76,425,111],{"class":110},[76,427,114],{"class":82},[76,429,43],{"class":110},[76,431,304],{"class":82},[76,433,117],{"class":110},[76,435,436],{"class":86},"e",[76,438,439],{"class":82}," :",[76,441,442],{"class":86}," duree.",[76,444,445],{"class":138},"entrySet",[76,447,448],{"class":86},"()) {\n",[76,450,452,455,457,460,463,466,469,472,475,478,481],{"class":78,"line":451},12,[76,453,454],{"class":86},"    System.out.",[76,456,191],{"class":138},[76,458,459],{"class":86},"(e.",[76,461,462],{"class":138},"getKey",[76,464,465],{"class":86},"() ",[76,467,468],{"class":82},"+",[76,470,471],{"class":145}," \" : \"",[76,473,474],{"class":82}," +",[76,476,477],{"class":86}," e.",[76,479,480],{"class":138},"getValue",[76,482,483],{"class":86},"());\n",[76,485,487],{"class":78,"line":486},13,[76,488,489],{"class":86},"}\n",[56,491,492,493,495,496,498,499,502,503,505,506,509],{},"Une clé est unique : un second ",[22,494,324],{}," avec la même clé remplace la valeur. ",[22,497,216],{}," d'une clé absente renvoie ",[22,500,501],{},"null",", d'où l'intérêt de ",[22,504,390],{},". ",[22,507,508],{},"HashMap"," ne garantit aucun ordre de parcours.",[511,512,513,526],"table",{},[514,515,516],"thead",{},[517,518,519,523],"tr",{},[520,521,522],"th",{},"Besoin",[520,524,525],{},"Choix",[527,528,529,539,549],"tbody",{},[517,530,531,535],{},[532,533,534],"td",{},"Suite ordonnée, accès par position",[532,536,537],{},[22,538,24],{},[517,540,541,544],{},[532,542,543],{},"Éléments sans doublon",[532,545,546],{},[22,547,548],{},"Set",[517,550,551,554],{},[532,552,553],{},"Accès par clé",[532,555,556],{},[22,557,28],{},[10,559,561],{"id":560},"les-génériques","Les génériques",[56,563,564,565,567,568,571,572,36],{},"Les chevrons de ",[22,566,35],{}," sont des ",[60,569,570],{},"génériques"," : ils indiquent le type des éléments. Le compilateur refuse alors d'ajouter un nombre dans une ",[22,573,35],{},[56,575,576,577,580],{},"Tu peux écrire tes propres types génériques. ",[22,578,579],{},"T"," est un paramètre de type, remplacé à l'usage :",[67,582,584],{"className":69,"code":583,"language":71,"meta":72,"style":72},"public record Paire\u003CT>(T premier, T second) { }\n\nPaire\u003CString> duo = new Paire\u003C>(\"sel\", \"poivre\");\nPaire\u003CInteger> nombres = new Paire\u003C>(1, 2);\n",[22,585,586,604,608,639],{"__ignoreMap":72},[76,587,588,591,594,597,599,601],{"class":78,"line":79},[76,589,590],{"class":82},"public",[76,592,593],{"class":82}," record",[76,595,596],{"class":110}," Paire",[76,598,111],{"class":86},[76,600,579],{"class":82},[76,602,603],{"class":86},">(T premier, T second) { }\n",[76,605,606],{"class":78,"line":90},[76,607,102],{"emptyLinePlaceholder":101},[76,609,610,613,615,617,619,622,624,626,629,632,634,637],{"class":78,"line":98},[76,611,612],{"class":86},"Paire",[76,614,111],{"class":110},[76,616,114],{"class":82},[76,618,117],{"class":110},[76,620,621],{"class":86},"duo",[76,623,123],{"class":82},[76,625,126],{"class":82},[76,627,628],{"class":86}," Paire\u003C>(",[76,630,631],{"class":145},"\"sel\"",[76,633,43],{"class":86},[76,635,636],{"class":145},"\"poivre\"",[76,638,149],{"class":86},[76,640,641,643,645,647,649,652,654,656,658,661,663,666],{"class":78,"line":105},[76,642,612],{"class":86},[76,644,111],{"class":110},[76,646,304],{"class":82},[76,648,117],{"class":110},[76,650,651],{"class":86},"nombres",[76,653,123],{"class":82},[76,655,126],{"class":82},[76,657,628],{"class":86},[76,659,660],{"class":221},"1",[76,662,43],{"class":86},[76,664,665],{"class":221},"2",[76,667,149],{"class":86},[56,669,670,671,674,675,36],{},"La même classe sert pour des textes comme pour des nombres, avec la sécurité du typage. Un type générique ne s'utilise qu'avec des objets : on écrit ",[22,672,673],{},"List\u003CInteger>"," et non ",[22,676,677],{},"List\u003Cint>",[10,679,681],{"id":680},"les-exceptions","Les exceptions",[56,683,58,684,687],{},[60,685,686],{},"exception"," est un objet qui signale une erreur et interrompt le déroulement normal du programme. Sans traitement, elle arrête tout.",[67,689,691],{"className":69,"code":690,"language":71,"meta":72,"style":72},"String texte = \"vingt\";\n\ntry {\n    int minutes = Integer.parseInt(texte);\n    System.out.println(minutes);\n} catch (NumberFormatException e) {\n    System.out.println(\"Durée invalide : \" + texte);\n} finally {\n    System.out.println(\"Terminé\");\n}\n",[22,692,693,708,712,719,738,747,762,778,787,800],{"__ignoreMap":72},[76,694,695,697,700,702,705],{"class":78,"line":79},[76,696,114],{"class":86},[76,698,699],{"class":86}," texte",[76,701,123],{"class":82},[76,703,704],{"class":145}," \"vingt\"",[76,706,707],{"class":86},";\n",[76,709,710],{"class":78,"line":90},[76,711,102],{"emptyLinePlaceholder":101},[76,713,714,716],{"class":78,"line":98},[76,715,42],{"class":82},[76,717,718],{"class":86}," {\n",[76,720,721,724,727,729,732,735],{"class":78,"line":105},[76,722,723],{"class":82},"    int",[76,725,726],{"class":86}," minutes",[76,728,123],{"class":82},[76,730,731],{"class":86}," Integer.",[76,733,734],{"class":138},"parseInt",[76,736,737],{"class":86},"(texte);\n",[76,739,740,742,744],{"class":78,"line":132},[76,741,454],{"class":86},[76,743,191],{"class":138},[76,745,746],{"class":86},"(minutes);\n",[76,748,749,752,754,757,759],{"class":78,"line":152},[76,750,751],{"class":86},"} ",[76,753,46],{"class":82},[76,755,756],{"class":86}," (NumberFormatException ",[76,758,436],{"class":110},[76,760,761],{"class":86},") {\n",[76,763,764,766,768,770,773,775],{"class":78,"line":166},[76,765,454],{"class":86},[76,767,191],{"class":138},[76,769,142],{"class":86},[76,771,772],{"class":145},"\"Durée invalide : \"",[76,774,474],{"class":82},[76,776,777],{"class":86}," texte);\n",[76,779,780,782,785],{"class":78,"line":180},[76,781,751],{"class":86},[76,783,784],{"class":82},"finally",[76,786,718],{"class":86},[76,788,789,791,793,795,798],{"class":78,"line":185},[76,790,454],{"class":86},[76,792,191],{"class":138},[76,794,142],{"class":86},[76,796,797],{"class":145},"\"Terminé\"",[76,799,149],{"class":86},[76,801,802],{"class":78,"line":207},[76,803,489],{"class":86},[56,805,806],{},"Le fonctionnement :",[808,809,810,816,821],"ol",{},[18,811,812,813,815],{},"Le bloc ",[22,814,42],{}," s'exécute. Dès qu'une exception se produit, il s'arrête.",[18,817,812,818,820],{},[22,819,46],{}," correspondant au type de l'exception prend le relais.",[18,822,812,823,825],{},[22,824,784],{},", facultatif, s'exécute dans tous les cas.",[56,827,828,829,832],{},"Attrape le type le plus précis possible. Un ",[22,830,831],{},"catch (Exception e)"," qui ne fait rien cache les vrais problèmes.",[10,834,836],{"id":835},"lancer-et-déclarer-une-exception","Lancer et déclarer une exception",[56,838,839,840,843,844,439],{},"Pour signaler une erreur, utilise ",[22,841,842],{},"throw",". Une exception « contrôlée » doit aussi être déclarée avec ",[22,845,846],{},"throws",[67,848,850],{"className":69,"code":849,"language":71,"meta":72,"style":72},"static void verifier(int portions) {\n    if (portions \u003C= 0) {\n        throw new IllegalArgumentException(\"portions doit être positif\");\n    }\n}\n",[22,851,852,871,887,904,909],{"__ignoreMap":72},[76,853,854,857,860,863,865,868],{"class":78,"line":79},[76,855,856],{"class":82},"static",[76,858,859],{"class":82}," void",[76,861,862],{"class":138}," verifier",[76,864,142],{"class":86},[76,866,867],{"class":82},"int",[76,869,870],{"class":86}," portions) {\n",[76,872,873,876,879,882,885],{"class":78,"line":90},[76,874,875],{"class":82},"    if",[76,877,878],{"class":86}," (portions ",[76,880,881],{"class":82},"\u003C=",[76,883,884],{"class":221}," 0",[76,886,761],{"class":86},[76,888,889,892,894,897,899,902],{"class":78,"line":98},[76,890,891],{"class":82},"        throw",[76,893,126],{"class":82},[76,895,896],{"class":138}," IllegalArgumentException",[76,898,142],{"class":86},[76,900,901],{"class":145},"\"portions doit être positif\"",[76,903,149],{"class":86},[76,905,906],{"class":78,"line":105},[76,907,908],{"class":86},"    }\n",[76,910,911],{"class":78,"line":132},[76,912,489],{"class":86},[56,914,915,916,919,920,923,924,927,928,919,931,934,935,937,938,36],{},"Java distingue deux familles. Les exceptions ",[60,917,918],{},"non contrôlées"," (comme ",[22,921,922],{},"IllegalArgumentException",") héritent de ",[22,925,926],{},"RuntimeException"," : le compilateur n'impose rien. Les exceptions ",[60,929,930],{},"contrôlées",[22,932,933],{},"IOException",", lors de la lecture d'un fichier) doivent être traitées par ",[22,936,46],{}," ou déclarées avec ",[22,939,846],{},[941,942,943],"warning",{},[56,944,945,946,948,949,951,952,955,956,959],{},"Ne renvoie jamais ",[22,947,501],{}," pour signaler une erreur sans le documenter. Le premier appel à une méthode sur ce ",[22,950,501],{}," lève une ",[22,953,954],{},"NullPointerException",". Une exception claire, ou un ",[22,957,958],{},"Optional",", vaut mieux.",[10,961,963],{"id":962},"sealed-et-switch-par-motif","sealed et switch par motif",[56,965,966,967,969,970,973],{},"Une interface ",[22,968,50],{}," liste exactement ses implémentations. Avec des records, le ",[22,971,972],{},"switch"," peut tester le type de chaque cas :",[67,975,977],{"className":69,"code":976,"language":71,"meta":72,"style":72},"sealed interface Resultat permits Succes, Echec { }\nrecord Succes(String recette) implements Resultat { }\nrecord Echec(String message) implements Resultat { }\n\nstatic String afficher(Resultat r) {\n    return switch (r) {\n        case Succes s -> \"Trouvée : \" + s.recette();\n        case Echec e -> \"Erreur : \" + e.message();\n    };\n}\n",[22,978,979,1003,1020,1036,1040,1053,1064,1089,1110,1115],{"__ignoreMap":72},[76,980,981,983,986,989,992,995,997,1000],{"class":78,"line":79},[76,982,50],{"class":82},[76,984,985],{"class":82}," interface",[76,987,988],{"class":110}," Resultat",[76,990,991],{"class":82}," permits",[76,993,994],{"class":221}," Succes",[76,996,43],{"class":86},[76,998,999],{"class":221},"Echec",[76,1001,1002],{"class":86}," { }\n",[76,1004,1005,1008,1010,1013,1016,1018],{"class":78,"line":90},[76,1006,1007],{"class":82},"record",[76,1009,994],{"class":110},[76,1011,1012],{"class":86},"(String recette) ",[76,1014,1015],{"class":82},"implements",[76,1017,988],{"class":221},[76,1019,1002],{"class":86},[76,1021,1022,1024,1027,1030,1032,1034],{"class":78,"line":98},[76,1023,1007],{"class":82},[76,1025,1026],{"class":110}," Echec",[76,1028,1029],{"class":86},"(String message) ",[76,1031,1015],{"class":82},[76,1033,988],{"class":221},[76,1035,1002],{"class":86},[76,1037,1038],{"class":78,"line":105},[76,1039,102],{"emptyLinePlaceholder":101},[76,1041,1042,1044,1047,1050],{"class":78,"line":132},[76,1043,856],{"class":82},[76,1045,1046],{"class":86}," String ",[76,1048,1049],{"class":138},"afficher",[76,1051,1052],{"class":86},"(Resultat r) {\n",[76,1054,1055,1058,1061],{"class":78,"line":152},[76,1056,1057],{"class":82},"    return",[76,1059,1060],{"class":82}," switch",[76,1062,1063],{"class":86}," (r) {\n",[76,1065,1066,1069,1072,1075,1078,1080,1083,1086],{"class":78,"line":166},[76,1067,1068],{"class":82},"        case",[76,1070,1071],{"class":86}," Succes s ",[76,1073,1074],{"class":82},"->",[76,1076,1077],{"class":145}," \"Trouvée : \"",[76,1079,474],{"class":82},[76,1081,1082],{"class":86}," s.",[76,1084,1085],{"class":138},"recette",[76,1087,1088],{"class":86},"();\n",[76,1090,1091,1093,1096,1098,1101,1103,1105,1108],{"class":78,"line":180},[76,1092,1068],{"class":82},[76,1094,1095],{"class":86}," Echec e ",[76,1097,1074],{"class":82},[76,1099,1100],{"class":145}," \"Erreur : \"",[76,1102,474],{"class":82},[76,1104,477],{"class":86},[76,1106,1107],{"class":138},"message",[76,1109,1088],{"class":86},[76,1111,1112],{"class":78,"line":185},[76,1113,1114],{"class":86},"    };\n",[76,1116,1117],{"class":78,"line":207},[76,1118,489],{"class":86},[56,1120,1121,1122,1125,1126,1129,1130,1132],{},"Comme tous les cas possibles sont listés, aucun ",[22,1123,1124],{},"default"," n'est requis. Si tu ajoutes un nouveau type à ",[22,1127,1128],{},"permits",", le compilateur signale chaque ",[22,1131,972],{}," à compléter.",[1134,1135,1136],"tip",{},[56,1137,1138,1139,1142,1143,1145,1146,1148],{},"Pour continuer, explore les flux avec ",[22,1140,1141],{},"stream()"," sur une ",[22,1144,24],{}," et la classe ",[22,1147,958],{},". Elles complètent naturellement ce cours.",[10,1150,1152],{"id":1151},"à-retenir","À retenir",[15,1154,1155,1163,1169,1175,1187],{},[18,1156,1157,1159,1160,1162],{},[22,1158,24],{}," garde un ordre et peut grandir ; ",[22,1161,28],{}," associe des clés uniques à des valeurs.",[18,1164,1165,1166,1168],{},"Les chevrons, comme ",[22,1167,35],{},", fixent le type des éléments : le compilateur vérifie à ta place.",[18,1170,1171,1172,1174],{},"Un paramètre de type ",[22,1173,579],{}," permet d'écrire une classe valable pour plusieurs types.",[18,1176,1177,43,1179,25,1181,1183,1184,1186],{},[22,1178,42],{},[22,1180,46],{},[22,1182,784],{}," traitent une exception ; ",[22,1185,842],{}," en déclenche une.",[18,1188,1189,1191,1192,1194],{},[22,1190,50],{}," avec des records et un ",[22,1193,972],{}," donne un code exhaustif, vérifié par le compilateur.",[1196,1197,1198],"style",{},"html pre.shiki code .sOnC1, html code.shiki .sOnC1{--shiki-light:#CF222E;--shiki-default:#FF7B72;--shiki-dark:#FF7B72}html pre.shiki code .scfrF, html code.shiki .scfrF{--shiki-light:#1F2328;--shiki-default:#E6EDF3;--shiki-dark:#E6EDF3}html pre.shiki code .sIXEE, html code.shiki .sIXEE{--shiki-light:#953800;--shiki-default:#FFA657;--shiki-dark:#FFA657}html pre.shiki code .syCW7, html code.shiki .syCW7{--shiki-light:#8250DF;--shiki-default:#D2A8FF;--shiki-dark:#D2A8FF}html pre.shiki code .shWOn, html code.shiki .shWOn{--shiki-light:#0A3069;--shiki-default:#A5D6FF;--shiki-dark:#A5D6FF}html pre.shiki code .sd6ml, html code.shiki .sd6ml{--shiki-light:#6E7781;--shiki-default:#8B949E;--shiki-dark:#8B949E}html pre.shiki code .s5iOY, html code.shiki .s5iOY{--shiki-light:#0550AE;--shiki-default:#79C0FF;--shiki-dark:#79C0FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":72,"searchDepth":90,"depth":98,"links":1200},[1201,1202,1203,1204,1205,1206,1207,1208],{"id":12,"depth":90,"text":13},{"id":53,"depth":90,"text":54},{"id":254,"depth":90,"text":255},{"id":560,"depth":90,"text":561},{"id":680,"depth":90,"text":681},{"id":835,"depth":90,"text":836},{"id":962,"depth":90,"text":963},{"id":1151,"depth":90,"text":1152},"Manipuler des List et des Map, écrire du code générique, gérer les erreurs avec les exceptions et modéliser des cas avec sealed et switch.","md",{},[24,236,28,508,570,686,1213,50,1214],"try-catch","pattern matching","avance","\u002Fjava\u002Fcollections-generiques-exceptions",[1218],"\u002Fjava\u002Fheritage-et-interfaces",[1220,1224,1227],{"nom":1221,"url":1222,"type":1223},"OpenClassrooms, Apprenez à programmer en Java","https:\u002F\u002Fopenclassrooms.com\u002Ffr\u002Fcourses\u002F6173501-apprenez-a-programmer-en-java","cours",{"nom":1225,"url":1226,"type":1223},"Développons en Java (Jean-Michel Doudoux)","https:\u002F\u002Fwww.jmdoudoux.fr\u002Fjava\u002Fdej\u002Findex.htm",{"nom":1228,"url":1229,"type":1230,"anglais":101},"Exceptions (dev.java, en anglais)","https:\u002F\u002Fdev.java\u002Flearn\u002Fexceptions\u002F","doc",{"title":5,"description":1209},[1233,1236,1239,1241],{"nom":1234,"url":1235},"Collections Framework, dev.java (en anglais)","https:\u002F\u002Fdev.java\u002Flearn\u002Fapi\u002Fcollections-framework\u002F",{"nom":1237,"url":1238},"Génériques, dev.java (en anglais)","https:\u002F\u002Fdev.java\u002Flearn\u002Fgenerics\u002F",{"nom":1240,"url":1229},"Exceptions, dev.java (en anglais)",{"nom":1242,"url":1243},"Classes et interfaces scellées, Java SE 25 (en anglais)","https:\u002F\u002Fdocs.oracle.com\u002Fen\u002Fjava\u002Fjavase\u002F25\u002Flanguage\u002Fsealed-classes-and-interfaces.html","java\u002F06.collections-generiques-exceptions","4XEXeA75Vat836YM0R-gl-RE-ME_a-Re5ucocN23m5w",[1247,1251,1255,1259,1263,1266,1267],{"path":1248,"title":1249,"stem":1250},"\u002Fjava\u002Fjvm-et-premier-programme","La JVM et ton premier programme","java\u002F01.jvm-et-premier-programme",{"path":1252,"title":1253,"stem":1254},"\u002Fjava\u002Fvariables-et-types","Variables, types et String","java\u002F02.variables-et-types",{"path":1256,"title":1257,"stem":1258},"\u002Fjava\u002Fconditions-boucles-methodes","Conditions, boucles et méthodes","java\u002F03.conditions-boucles-methodes",{"path":1260,"title":1261,"stem":1262},"\u002Fjava\u002Ftableaux-classes-et-records","Tableaux, classes et records","java\u002F04.tableaux-classes-et-records",{"path":1218,"title":1264,"stem":1265},"Héritage, interfaces et polymorphisme","java\u002F05.heritage-et-interfaces",{"path":1216,"title":5,"stem":1244},{"path":1268,"title":1269,"stem":1270},"\u002Fjava","Java","java\u002Findex",[1272,1274],{"title":1264,"path":1218,"stem":1265,"description":1273,"children":-1},"Réutiliser une classe avec l'héritage, définir un contrat avec une interface, et traiter des objets différents de la même façon.",null,[1276],{"path":1218,"title":1264,"ligne":71},[1278,1280,1281,1282,1284,1285,1286],{"path":1248,"title":1249,"niveau":1279,"stem":1250},"debutant",{"path":1252,"title":1253,"niveau":1279,"stem":1254},{"path":1256,"title":1257,"niveau":1279,"stem":1258},{"path":1260,"title":1261,"niveau":1283,"stem":1262},"intermediaire",{"path":1218,"title":1264,"niveau":1283,"stem":1265},{"path":1216,"title":5,"niveau":1215,"stem":1244},{"path":1268,"title":1269,"niveau":1287,"stem":1270},"memo",1794583453878]