IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

anonymat en java ?


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 50
    Points : 50
    Points
    50
    Par défaut anonymat en java ?
    Bonsoir,
    Certains concepts en Java me restent toujours flous même en essayant de chercher la bonne réponse via les moteurs de recherche.
    En fait, j'aimerai bien trouver quelqu'un qui pourra m'expliquer quelle est l'utilité derrière l'utilisation des classes internes, pourquoi on ne la déclare pas ailleurs puis on fait appel à elle, aussi, pourquoi on se sert des classes anonymes?
    pourquoi ces deux concepts ont été proposés par SUN??!

    trop perdu!!!

    Merci en avance pour votre aide.

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Je vais "tenter" de t'éclairer... au moins pour la classe interne

    Un point intéressant d'une classe interne c'est qu'elle peut accéder à toutes les propriétés de la classe englobante, ce qui facilite le codage (évite de transmettre les attributs/propriétés).
    Elle peut également utiliser les visibilités private, protected (chose que ne peut pas faire la classe principale)
    Donc, l'intérêt est dans la structuration de données (on pourrait de ce point de vue les assimiler aux "struct" du C)

    Pour les classes anonymes, je trouve un peu plus flou, mais bien pratique pour définir les méthodes liées aux listener dans les clients swing (surtout qu'on peut directement utiliser le nom de l'interface).
    Ce que je n'aime pas ici, c'est que finalement, d'un point de vue lexical du moins, on contredit le fait qu'une interface ne peut être instanciée.

    Je ne sais pas si ça t'aide... mais j'aurai tenté
    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    l'intéret des classes anonyme, c'est de poouvoir facilement et rapidement coder une classe à usage unique. Par exemple pour coder vite fait un listener de 2 lignes. Il est plus propre et lisible d'avoir plusieurs listeners de 2 ligne codé là ou on en a besoin que d'avoir une orgie de classes qui porteraient de nom du style 'ActionListenerBoutonOkInterfaceAide', 'ActionListenerBoutonRefreshInterfaceAide', 'ActionListenerBoutonRechercheInterfaceAide', 'MouseListenerBoutonRechercheInterfaceAide', 'KeyListenerTexfieldRechercheInterfaceAide', 'ActionListenerBoutonOkInterfaceAideDropDown'

    et qui n'auraient de toutes façons aucune utilité à l'extérieur de la fenetre/composant concerné.

    Mais ce n'est pas limité aux listener. Il arrive que l'on aie besoin de surcharger 'vite fait' un classe pour lui ajouter un comportement de 3 lignes ou une méthode de construction différente. Même si c'est plus rare que l'implémentation d'interface, ca a aussi son utilité en classe anonyme. Par exemple, en abusant un peu de ça, on peut créer ce genre de code dans une classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class MaClasse {
       private Map<String,String> dictionnaire() = new HashMap()<String,String>{
           put("key1","value1");
           put("key2","value2");
           put("key3","value3");
           put("key4","value4");
           put("key5","value5");
       }
    }
    bon certains développeur (et je comprend) n'aiment pas ce cas particulier car finalement ca consiste à charger un classe supplémentaire dans le classloader pour juste raccourcir une initialisation, si on fait ca partout ca deviens vite encombrant ^^.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par tchize_ Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class MaClasse {
       private Map<String,String> dictionnaire() = new HashMap()<String,String>{
           put("key1","value1");
           put("key2","value2");
           put("key3","value3");
           put("key4","value4");
           put("key5","value5");
       }
    }
    Je chipote surement mais il manque une paire d'accolades pour que ça compile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private Map<String, String> dictionnaire = new HashMap<String, String>() {
            {
                put("key1", "value1");
                put("key2", "value2");
                put("key3", "value3");
                put("key4", "value4");
                put("key5", "value5");
            }
        };
    Il faut placer les appels dans le bloc d'initialisation anonyme. Ceci dit je suis d'accord avec toi que je trouve ça plutôt moche, mais je l'utilise pour tester rapidement des choses parfois...

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Dans tous les cas, je ne vois pas le rapport avec une classe anonyme ici.
    C'est une instanciation tout à fait standard d'une classe HashMap, ce n'est pas une interface (Map l'est)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Dans tous les cas, je ne vois pas le rapport avec une classe anonyme ici.
    C'est une instanciation tout à fait standard d'une classe HashMap, ce n'est pas une interface (Map l'est)
    Et pourtant... C'est bien un cas de classe anonyme (il suffit de voir les fichier class générés pour s'en convaincre). Car ce que l'on fait en réalité est une classe anonyme étendant Hashmap qui contient un bloc d'initialisation. Donc si c'est bien une classe anonyme, que l'on implémente une interface ou que l'on étende une classe abstraite ou non.

Discussions similaires

  1. Java Tor et anonymat ?
    Par SupTemp dans le forum Général Java
    Réponses: 3
    Dernier message: 21/07/2011, 10h04
  2. le Java est la continuité du C++ ???
    Par Vincent PETIT dans le forum Débats sur le développement - Le Best Of
    Réponses: 33
    Dernier message: 25/08/2005, 20h17
  3. directx et java?? possible??
    Par jiraiya dans le forum DirectX
    Réponses: 3
    Dernier message: 09/07/2002, 19h55
  4. webcam : lire sur un port usb en c/c++ ou java. sous win. ?
    Par flo007 dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 24/05/2002, 23h24
  5. Service de nommage java C++
    Par Anonymous dans le forum CORBA
    Réponses: 3
    Dernier message: 15/04/2002, 12h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo