Edit2: tout va bien, tout est en ordre.
Edit: c'est le bazar dans ma têteMon exemple fonctionne en dessous, mais j'ai le sentiment que quelque chose cloche.
Il y a quelque chose qui m'échappe. Un exemple pas très clair, dénote un certain flou dans les idées...
Bonjour,
je cherche un exemple ou l'on doit impérativement (éventuellement static) déclarer une méthode générique de la sorte:
je cherche depuis un moment, un coup de pouce svp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public <T> T methode( T[] tableau){ // ... }
Merci.
Edit:
J'ai un petit exemple:
En console:
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 package genericite2; public class MaClasse { static String[] arrayString1 = {"Surcouf" , "Auguin" , "Tabarly"}; // utilisé dans Exemple1. Integer[] arrayInteger2 = {24 , -67 , 18}; // utilisé dans Exemple2. Double[] arrayDouble3 = { -7.89d , 0d , 99d}; TabelleWerkzeug outil = new TabelleWerkzeug(); // utilisé dans Exemple2. public static void main(String[] args) { // Exemple 1: String firstS1 = TabelleWerkzeug.getFirst(arrayString1); // static est obligatoire dans 'getFirst', // car l'appel de la méthode se fait par le nom de la classe 'TabelleWerkzeug'; // 'arrayString1' doit être static, car le méthode générique 'getFirst' est static. System.out.println("Exemple1 getFirst: " + firstS1+"\n"); // Exemple 2: MaClasse maClasse = new MaClasse(); Integer firstBisI2 = maClasse.outil.getFirstBis(maClasse.arrayInteger2); // 'getFirstBis' est appelé avec la variable 'maClasse.outil' de type 'Werkzeug'. System.out.println("Exemple2 getFirstBis: " + firstBisI2+"\n"); // Exemple 3a: Double firstTerD3 = maClasse.getFirstTer(maClasse.arrayDouble3); System.out.println("Exemple3a getFirstTerD: " + firstTerD3); // Exemple 3b: String firstTerS3 = maClasse.getFirstTer(maClasse.arrayString1); System.out.println("Exemple3a getFirstTerS: " + firstTerS3+"\n"); // Exemple 4: String str = maClasse.get(arrayString1); System.out.println("Exemple4 NON GENERIQUE get: " + str); } // Exemple 3: public <T> T getFirstTer( T[] arrayOfT){ return arrayOfT[0]; } // Exemple 4: méthode non générique (ne fonctionne pas avec un tableau d'Integer, de Double, etc... public String get(String[] tabelle){ return tabelle[0]; } } ******************************************************************************************************************************* package genericite2; public class TabelleWerkzeug { // Exemple 1: public static <T> T getFirst( T[] arrayOfT){ return arrayOfT[0]; } // Exemple 2: public <T> T getFirstBis( T[] arrayOfT){ return arrayOfT[0]; } }
J'en conclue qu'avec ce genre de méthode générique 'public <T> T methode( T[] tableau)' que:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Exemple1 getFirst: Surcouf Exemple2 getFirstBis: 24 Exemple3a getFirstTerD: -7.89 Exemple3a getFirstTerS: Surcouf Exemple4 NON GENERIQUE get: Surcouf
1) il est possible d'obtenir pour la valeur de retour un type différent (public <T> T);
2) ce type est fonction du type du paramètre que l'on utilise; (une espèce de surcharge de méthode)
C'est bien pratique.
Partager