Plusieurs classes les mêmes ? (en java)
Résolu/Fermé
tnorange
Messages postés
7
Date d'inscription
mercredi 23 avril 2014
Statut
Membre
Dernière intervention
15 mai 2014
-
4 mai 2014 à 18:48
tnorange Messages postés 7 Date d'inscription mercredi 23 avril 2014 Statut Membre Dernière intervention 15 mai 2014 - 14 mai 2014 à 22:39
tnorange Messages postés 7 Date d'inscription mercredi 23 avril 2014 Statut Membre Dernière intervention 15 mai 2014 - 14 mai 2014 à 22:39
A voir également:
- Plusieurs classes les mêmes ? (en java)
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
- Java décompiler - Télécharger - Langages
1 réponse
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
4 mai 2014 à 23:45
4 mai 2014 à 23:45
Bonjour,
Ce sont des classes anonymes. Cela arrive lorsque tu fais par exemple un code Swing comme ceci :
Au moment de la compilation Java remplace ce code par un autre plus ou moins équivalent que l'on pourrait transcrire comme ceci :
Tes classes anonymes $1, $2, $3 sont donc tout à fait normales. Tu pourras également trouver des .class nommés "Interface$Toto" si tu fais par exemple :
Dans ce cas ce ne sont plus des classes anonymes (vu qu'elles ont un nom) c'est ce que l'on appelle des classes internes.
Remarque : il est tout à fait possible de voir des classes locales (internes ou anonymes) imbriquées de telle sorte que l'on ait plusieurs $ dans un même nom de fichier .class
Exemple :
Note : vu que le $ est utilisé en interne par Java, il vaut mieux éviter de l'utiliser soi même dans ses noms de classes, méthodes ou variables, même s'il est autorisé par le compilateur.
Ce sont des classes anonymes. Cela arrive lorsque tu fais par exemple un code Swing comme ceci :
JButton button = new JButton("Ok"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println(e); } }
Au moment de la compilation Java remplace ce code par un autre plus ou moins équivalent que l'on pourrait transcrire comme ceci :
public class MaClasse$1 implements ActionListener { public void actionPerformed(ActionEvent e) { System.out.println(e); } } JButton button = new JButton("Ok"); button.addActionListener(new MaClasse$1());
Tes classes anonymes $1, $2, $3 sont donc tout à fait normales. Tu pourras également trouver des .class nommés "Interface$Toto" si tu fais par exemple :
public class Interface { public static class Toto { } }
Dans ce cas ce ne sont plus des classes anonymes (vu qu'elles ont un nom) c'est ce que l'on appelle des classes internes.
Remarque : il est tout à fait possible de voir des classes locales (internes ou anonymes) imbriquées de telle sorte que l'on ait plusieurs $ dans un même nom de fichier .class
Exemple :
import java.awt.event.*; import java.util.*; import javax.swing.*; public class Test // Test.class { public static class Toto // Test$Toto.class { JButton button; List<String> list; public Toto() { list = new ArrayList<String>(); button = new JButton("Trier"); button.addActionListener(new ActionListener() // Test$Toto$1.class { // Test$Toto$1$1.class private Comparator<String> comp = new Comparator<String>() { @Override public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } }; @Override public void actionPerformed(ActionEvent e) { Collections.sort(list, comp); } }); } } }
Note : vu que le $ est utilisé en interne par Java, il vaut mieux éviter de l'utiliser soi même dans ses noms de classes, méthodes ou variables, même s'il est autorisé par le compilateur.
14 mai 2014 à 22:39