Bonsoir,
J'ai le code suivant de la classe Joueur
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():
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
1 2
|
Arrays.sort(team,j2::comp); //ca fonctionne parfaitement |
2- la référence vers une méthode de classe:
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:
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:
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
Partager