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

API standards et tierces Java Discussion :

Objet en lecture/ non modifiable


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 65
    Par défaut Objet en lecture/ non modifiable
    Bonjour,

    j'aimerais créer un getter qui permette de retourner un objet mais en lecture seulement.
    Je sais que c'est possible sur une liste (java.util.Collections) mais je n'ai pas trouvé pour un objet et je commence à douter que cela existe.

    Si jms vous avez des pistes n'hésitez pas, merci.

  2. #2
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    Je vois deux solutions :
    - tu crées une copie du membre que tu retournes, afin d'éviter qu'une modification modifie l'état interne de ton objet (copie de protection / classe immuable) ;
    - tu crées un proxy de ton membre, empêchant toute modification (exception ?) avec CGLIB par exemple ; c'est beaucoup plus compliqué cependant et a des contraintes supplémentaires (pas de classes final par exemple).

  3. #3
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour,

    Moi je dirais tu créés une interface sans les setters .
    Évidemment, si l'utilisateur connais l'objet réel, un cast suffis a contourner le problème.
    Donc l'autre solution tu créés une classe qui hérite de la classe que tu veux rendre non modifiable. Ensuite tu surcharges les setters qui retournent une exception.
    Tu peux même faire un mixe des deux solutions, comme ça l'utilisateur ne verra que les getters et en cas de cast ça lui amènera que des exceptions sur les setters
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Par défaut
    On ne peut diminuer la visibilité d'une propriété d'une classe donc les setter resteront toujours visible même après héritage!
    Je pense qu'une copie (profonde) de la valeur retournée (qui est non modifiable ) est une solution assez simple..

  5. #5
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    hibour, c'est bien pour cela qu'il est nécessaire de faire une surcharge des setters !
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Par défaut
    Citation Envoyé par Alkhan Voir le message
    hibour, c'est bien pour cela qu'il est nécessaire de faire une surcharge des setters !
    Et si sa classe est finale :p
    le fait de surcharger les méthodes pour renvoyer une exception UnsupportedOperationException n'interdit pas à la compilation l'utilisation de cette derniere

Discussions similaires

  1. Objets non modifiés.
    Par MickSou dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2012, 13h56
  2. Réponses: 17
    Dernier message: 30/09/2010, 14h26
  3. Rendre la lecture non bloquante
    Par Charlinecha dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 05/07/2005, 15h46
  4. Attributs d'un record en property non modifiables
    Par WebPac dans le forum Langage
    Réponses: 15
    Dernier message: 11/04/2005, 12h59
  5. Réponses: 3
    Dernier message: 16/03/2004, 16h42

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