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

Langage Java Discussion :

Pourquoi String est-elle final ?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 75
    Par défaut Pourquoi String est-elle final ?
    Bonsoir,

    Je cherche à gérer ma collection de Babar.
    J'ai donc le même livre traduit dans différentes langues :
    - Babar voyage
    - Travel of Babar
    - Babar, konishiwa Fujiyama !

    J'ai donc pensé que l'objet Book possédait la variable List<Title> titleList dont l'implémentation de Title est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class Title extends String {
    	private Locale locale;
    	...
    }
    qui me permet d'avoir les titres selon la langue.

    Mais depuis java 5 me semble-t-il, String devenue final. Je ne peux donc pas écrire ce code.

    D'où ma question. Quelle est la raison pour que String soit final ? Je ne vais réimplémenter String pour lui ajouter une fonctionnalité dont j'ai besoin.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Pour la même raison que Integer /Float / ... sont final. Ce sont des composants de base.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Title {
    	private Locale locale;
            private String value
    	...
    }
    En quoi une composition dérange?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 75
    Par défaut
    C'est justement parce que c'est un composant de base qu'il est intéressant de pouvoir l'étendre !

    Alors, je te l'accorde, une composition peut être une solution, solution qui en soit n'est pas très compliquée car il me suffirait d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Title {
    	private Locale locale;
            private String value;
     
    	public int length() {
    		return value.length();
    	}
    	...
    }
    Mais du coup, je deviens "responsable" des constructeurs, des méthodes et des javadocs afférents à la classe String. C'est donc contraire au principe de l'héritage objet qui consiste à ajouter des fonctionnalités à une classe avec un minimum de risque (notamment ceux dûs aux copier-coller). Ensuite, lors d'une mise à jour de la jdk, je dois en plus maintenir le code de cette classe afin d'appeler les potentielles nouvelles méthodes ou supprimer les appels à des méthodes dépréciées (enfin ?) supprimées. Bref, pisser du code inutilement et maintenir du code inutilement.

    Maintenant, tu t'y connais probablement plus que moi, et si je n'ai pas d'autre choix, j'opterais pour cette solution.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Qu'est ce que tu entends par devenir responsable des méthodes et constructeurs? Au delà de ça string a un certain nombre de comportements qui deviendraient instables avec une sous classe. par exemple le fait que cette classe soit immuable, son utilisation dans les switch case...
    A noter que tu peux aussi étendre charsequence si tu préfère.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Autre détail, les strings comme l'autoboxing étant utilisés fortement par les codes, les rendre finaux permet à la jvm un certain nombre d'optimisations et raccourcis de calcul qui sont importants pour avoir des performances potables :-)

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    String est surtout final afin de s'assurer de l'immutabilité de la classe.
    Et c'est très important car cela permet de partager une instance sans avoir peur qu'elle ne soit modifiée par ailleurs.
    En effet rien ne garantie que les classes filles conservent cette notion, et du coup on ne pourrait plus considérer String comme immuable.

    Si tu supprimes cela tu casses potentiellement tous les programmes Java, et il faudrait gérer des copies de tous les cotés...

    a++

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

Discussions similaires

  1. Ma String est-elle compatible Latin1 ?
    Par Foub dans le forum Langage
    Réponses: 30
    Dernier message: 08/12/2011, 16h40
  2. "string" est-elle de type char*
    Par yessine66 dans le forum C
    Réponses: 2
    Dernier message: 30/09/2010, 18h33
  3. Pourquoi cette variable est-elle vide ?
    Par yann18 dans le forum Langage
    Réponses: 2
    Dernier message: 14/03/2008, 10h36
  4. Réponses: 3
    Dernier message: 04/03/2007, 09h34
  5. [8086] Pourquoi la taille de segment est-elle de 64 ko ?
    Par gza.gza dans le forum Assembleur
    Réponses: 3
    Dernier message: 28/02/2007, 21h24

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