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 :

"final" empêche-t-il de modifier un objet retourné ?


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2011
    Messages : 64
    Points : 38
    Points
    38
    Par défaut "final" empêche-t-il de modifier un objet retourné ?
    Bonjour, pourriez vous me dire si res, apres avoir été retourné par cette méthode, peut etre modifié ?
    merci de votre réponse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
        @Override
        public final T findById(final Integer pId) {
            final EntityManager em = EntityManagerUtils.createEntityManager();
            try {
                final CriteriaBuilder cb = em.getCriteriaBuilder();
                final CriteriaQuery<T> cq = cb.createQuery(getEntityClass());
                final Root<T> r = cq.from(getEntityClass());
                cq.where(cb.equal(r.get(PRIMARY_KEY_PROPERTY), pId)));
                cq.select(r);
                final TypedQuery<T> tq = em.createQuery(cq);
                final T res = tq.getSingleResult();
                return res;
            } catch (final NoResultException e) {
                LOGGER.warning(e.getMessage());
                return null;
            } finally {
                EntityManagerUtils.close(em);
            }
        }

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    Par défaut
    On peut pas savoir, ça dépend s'il est d'une classe mutable ou pas.

    Pour tenir compte du titre de ta question, le mot-clé final n'a rien à voir avec ça. Il empêche de changer les variables, pas le contenu des objets.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2011
    Messages : 64
    Points : 38
    Points
    38
    Par défaut mutable ou pas
    OK merci de l'info,
    pour être sûr final empêche de faire un new sur l'objet mais pas un set sur ses attribut, dans ce contexte c'est bien cela ?

    il est d'une classe public ayant les annotations
    @ManagedBean
    @SessionScoped

    es-ce une classe mutable?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    Par défaut
    Ça veut rien dire, "empêcher de faire un new sur un objet."

    Une variable final est une variable à laquelle on ne peut pas assigner autre chose que sa toute première assignation.
    Lorsque c'est une variable objet, on sait donc que cette variable ne peut pas contenir autre chose que le seul et unique objet qu'on y ait jamais mis.

    Citation Envoyé par bibouilles Voir le message
    il est d'une classe public ayant les annotations
    @ManagedBean
    @SessionScoped

    es-ce une classe mutable?
    On peut pas savoir. Une classe mutable est une classe dont il est possible de changer l'état interne après l'appel du constructeur.
    Par opposition aux classes immutables comme par exemple Integer ou String qui ne fournissent aucun moyen de changer leur état interne, et donc dont l'état interne ne peut pas être changé.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2011
    Messages : 64
    Points : 38
    Points
    38
    Par défaut immuable et final
    merci bien, il me semble comprendre
    dans mes mots, pour utiliser la technique de la reformulation,
    avec une variable objet final, on peut modifier le contenu de cet objet mais pas la référence à cet objet (par le biais d'un new)

    et comme ma classe conteneur est mutable on peut modifier ses variables

    ex-ce bien cela?

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 554
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 554
    Points : 21 615
    Points
    21 615
    Par défaut
    Citation Envoyé par bibouilles Voir le message
    avec une variable objet final, on peut modifier le contenu de cet objet mais pas la référence à cet objet (par le biais d'un new)
    Ni par le biais d'un new, ni par aucun autre biais.

    Citation Envoyé par bibouilles Voir le message
    et comme ma classe conteneur est mutable on peut modifier ses variables
    Non. Comme on peut modifier les variables de ta classe, alors elle est mutable.
    C'est dans ce sens-là, pas dans l'autre sens.

    Si une classe a un contenu modifiable, alors elle est mutable. C'est ce que veut dire le mot mutable.

    À noter que mettre "final" à toutes les variables d'une classe ne suffit pas pour la rendre immutable. Il faut aussi que toutes les variables en question soient d'un type immutable. Sinon, changer le contenu d'un objet A contenu dans un objet B, signifie que le contenu de l'objet B a changé aussi, et donc qu'il est mutable.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

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