Bonsoir,

J'ai le code suivant de la classe Joueur

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
 
 
package edu.java8.tools;
 
/**
 *
 * @author House
 */
public class Joueur {
   private int num;
   private String nom;
 
    public Joueur() {
    }
 
    public Joueur(Integer num) {
        this.num = num;
    }
 
    public Joueur(int num, String nom) {
        this.num = num;
        this.nom = nom;
    }
 
 
 
    public Integer getNum() {
        return num;
    }
 
    public void setNum(Integer num) {
        this.num = num;
    }
 
    @Override
    public String toString() {
        return "Joueur{" + "num=" + num + ", nom=" + nom + '}';
    }
 
    public String getNom() {
        return nom;
    }
 
    public void setNom(String nom) {
        this.nom = nom;
    }
 
 
    public int comp(Joueur o1, Joueur o2) {
        return o1.getNom().compareTo(o2.getNom());
    }
 
     public int comp2(Joueur o1) {
        return this.getNum() - o1.getNum();
    }
 
    public static int compareJoueur(Joueur o1, Joueur o2) {
        return o1.getNum() - o2.getNum();
    }
 
}
et j'ai une autre classe qui contient la méthode main():

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
public static void main(String[] args) {
 Joueur[] team = new Joueur[3];
        Joueur j1 = new Joueur(24);
        Joueur j2 = new Joueur(7);
        Joueur j3 = new Joueur(11);
 
        team[0]= j1;
        team[1]= j2;
        team[2]= j3;
 
}
dans la classe main, j'ai voulu trié mes éléments qui se trouvent dans le tableau team en utlisant

1- la référence vers une méthode d'instance

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Arrays.sort(team,j2::comp);  //ca fonctionne parfaitement
2- la référence vers une méthode de classe:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Arrays.sort(team,Joueur::compareJoueur); //ca fonctionne parfaitement
3- Mais quand j'ai voulu tester une référence d une méthode d'instance d'un objet arbitraire d'un type particulier comme suit:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Arrays.sort(team,Joueur::compare); //Ca ne fonctionne pas
alors que la méthode compare prend 2 paramètres et renvoie un int... C'est similaire à la méthode compare de l'interface fonctionnelle Comparator que prend Arrays.sort( team, Comparator<Joueur>)

En notant que le code suivant fonctionne parfaitement:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Arrays.sort(team,Joueur::comp2); //Good
1)- Ma première question est: pourquoi ma troisième manière ne fonctionne pas!
2)- Ma deuxième question est: Dans quel cas, je peux invoquer une méthode d'instance en utilisant le nom de la classe avec l'opérateur de résolution de portée :: ?

J'espère que mes questions sont claires et merci pour votre aide en avance