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 :

[Java 8] Ce qui est static dans les interfaces


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut [Java 8] Ce qui est static dans les interfaces
    Bonjour
    petite question très théorique.
    Jusqu'à présent on ne pouvait pas avoir de bloc "static" dans une interface.
    bon (je pensais -dans doute faussement- que c'était lié à la manière dont les interfaces étaient initialisées -ou pas initialisées du tout - par les ClassLoaders).

    Je pensais qu'avec l'introduction de tas de machin static dans les interfaces de java8 ça deviendrait possible.
    Selon toutes apparences ce n'est toujours pas possible: quelqu'un voit précisément pourquoi?
    Merci

    edit: vague brainstorming ... serait-ce lié au fait qu'une interface ne devrait pas avoir d'effet de bord? mais on peut toujours avoir une méthode statique, une classe statique -ou même une simple initialisation de variable static final- qui a un effet de bord quelque part non?

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par professeur shadoko Voir le message
    edit: vague brainstorming ... serait-ce lié au fait qu'une interface ne devrait pas avoir d'effet de bord?
    À mon sens c'est surtout ça, oui...

    Avant, une interface ne devait pas avoir de code du tout (sauf à la limite dans la déclaration de ses champs si elle en a, pour les initialiser, portée assez réduite.)
    Maintenant, une interface peut éviter de créer à côté les bien connues classes utilitaires, dont l'idée est de faire du code qui porte entièrement sur le contrat exposé par l'interface et pas sur la représentation interne de l'état des instances ou des classes. Autrement dit du code oui, mais pas d'effet de bord.

    Conclusion les champs déclarés par une interface ne sont toujours pas mutables malgré ces changements, et un bloc d'initialisation static ne me semble donc toujours pas d'une utilité quelconque.
    Si on commence à parler d'objets mutables à construire les uns par rapport aux autres, moi je dis c'est plus une interface, c'est une classe : ça touche à bien plus de choses que les seules méthodes exposées.

    Citation Envoyé par professeur shadoko Voir le message
    mais on peut toujours avoir une méthode statique, une classe statique -ou même une simple initialisation de variable static final- qui a un effet de bord quelque part non?
    "Quelque part" oui, dès qu'on a du code c'est toujours une possibilité, c'en était déjà une effectivement avec les initialisations de leurs variables.
    "Quelque part" mais pas dans l'interface elle-même ni dans l'instance qu'elle représente.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Conclusion les champs déclarés par une interface ne sont toujours pas mutables malgré ces changements, et un bloc d'initialisation static ne me semble donc toujours pas d'une utilité quelconque.
    L'objectif n'est pas d'avoir des champs mutables mais de compléter l'initialisation de ces champs. Plusieurs cas peuvent se présenter:
    - initialisations susceptibles de propager une exception
    - initialisations par chargement d'une ressource (ex: peuplement d'un objet Properties)
    - initialisations par recherche de service (avec ServiceLoader)

    On y arrive mais en torturant la grand-mère .... A ce stade je ne suis pas encore totalement convaincu.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Mouais mais bon c'est précisément le genre de trucs qui, en principe, n'ont rien à faire dans une interface.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Mouais mais bon c'est précisément le genre de trucs qui, en principe, n'ont rien à faire dans une interface.
    A tout bon principe on trouve des exceptions (et j'en ai).
    Je soupçonne quand même des raisons plus fondamentales ....

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ma foi, d'autres avis (ou un lien expliquant directement les raisons de départ du choix) ne me déplairaient pas non plus.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [Java] Quel OS est utilisé dans les entreprises ?
    Par vinou33 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 12/02/2015, 09h56
  2. [JAVA] Appeller fonction qui est dans un autre fichier
    Par Aspic dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/05/2007, 21h12
  3. [C++] Pb avec les variable static dans les classe
    Par quantik-revolution dans le forum C++
    Réponses: 3
    Dernier message: 03/03/2006, 18h40
  4. [C#] Connaitre la colonne qui est cliquée dans un ListView
    Par omlip dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/12/2004, 20h01
  5. Ne pas afficher un champs qui est vide dans ma BD
    Par yoda_style dans le forum ASP
    Réponses: 3
    Dernier message: 27/04/2004, 11h40

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