Plusieurs classes les mêmes ? (en java)
Résolu
tnorange
Messages postés
7
Statut
Membre
-
tnorange Messages postés 7 Statut Membre -
tnorange Messages postés 7 Statut Membre -
Bonjour !
Je me posait une question auquel aucune réponse n'a été apporté !
Pourquoi dans un projet java il y a plusieurs fois la même classe avec des noms différents, est-ce un problème ou pas ?
exemple :
Interface$1.class
Interface$2.class
Interface$3.class
Interface$4.class
Interface$5.class
Interface$6.class
Interface$7.class
Interface$8.class
Interface$9.class
Interface$10.class
Interface$11.class
Interface$12.class
Interface$13.class
Interface$14.class
Interface$15.class
Interface$16.class
Interface$17.class
Interface$18.class
Interface$19.class
Interface$20.class
Interface$21.class
Interface$22.class
Interface$23.class
Interface$23.class
(Et dans mon projet, il n'y a qu'une seule classe interface ?)
ou encore dans le même projet :
TestL1P1$1.class
TestL1P1$2.class
TestL1P1$3.class
Est-ce que quelqu'un serait pourquoi il a ça ?
Est-ce un problème ou pas ?
Je me posait une question auquel aucune réponse n'a été apporté !
Pourquoi dans un projet java il y a plusieurs fois la même classe avec des noms différents, est-ce un problème ou pas ?
exemple :
Interface$1.class
Interface$2.class
Interface$3.class
Interface$4.class
Interface$5.class
Interface$6.class
Interface$7.class
Interface$8.class
Interface$9.class
Interface$10.class
Interface$11.class
Interface$12.class
Interface$13.class
Interface$14.class
Interface$15.class
Interface$16.class
Interface$17.class
Interface$18.class
Interface$19.class
Interface$20.class
Interface$21.class
Interface$22.class
Interface$23.class
Interface$23.class
(Et dans mon projet, il n'y a qu'une seule classe interface ?)
ou encore dans le même projet :
TestL1P1$1.class
TestL1P1$2.class
TestL1P1$3.class
Est-ce que quelqu'un serait pourquoi il a ça ?
Est-ce un problème ou pas ?
1 réponse
-
Bonjour,
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.