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 Annotation @Overridable


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 13
    Points : 12
    Points
    12
    Par défaut JAVA Annotation @Overridable
    Bonjour à tous,
    J'ai une question qui me taraude depuis des années sur java.
    Alors, comme je n'ai rien à faire tout de suite...

    Voilà : tout le monde connaît l'annotation @Override accolée à une fonction qui redéfinit une méthode d'une superclasse.
    Le problème est le suivant : il m'arrive souvent de déclarer des méthodes dans une classe de base, qui seront redéfinies ou pas dans les classes dérivées.
    Ces méthodes implémentent un comportement par défaut et ne sont donc pas abstraites.
    Par exemple :

    public static class C1 {
    @SuppressWarnings({ "unused", "static-method" }) int myMethod( final String param1 ) throws Exception { return -1 ; }
    }

    class C2 extends C1 { @Override int myMethod( String param1 ) throws Exception
    {
    if ( param1.isEmpty() )
    throw new Exception( "Aie" ) ;
    return new Integer( param1 ).intValue() ;
    } }

    Et là, c'est le drame : j'ai des warnings (sous Eclipse) car:
    - la méthode de la classe C1 a un paramètre non utilisé (mais nécessaire aux redéfinitions des classes dérivées),
    - déclare déclencher une exception alors que ce n'est pas le cas (mais nécessaire aux redéfinitions...),
    - peut avantageusement être déclarée statique (mais pas pour les redéfinitions fonctionnent)

    Du coup : soit je désactive les warnings correspondants d'Eclipse qui sont par ailleurs très utiles, soit je pourris mon beau code avec des @SuppressWarnings de partout (ce que je finis par faire en pleurant).
    Bon sang, mais pourquoi n'existe-t-il pas une annotation simple comme @Overridable qui apaiserait le compilateur sur ce genre de fonction ?

    Je ne suis sûrement pas assez au fait de Java pour comprendre les tenants et aboutissants du problème.
    M.... koâ

  2. #2
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Il me semble qu'il existe une option pour ne pas mettre de warning sur les éléments qui sont correctement documentés en JavaDoc. Mais je ne veux pas dire de bêtise ne sachant pas s'il s'agit d'une spécificité de l'IDE ou pas.


    Toujours est-il que la JavaDoc est un bon remède.

    Ensuite, si tes classes initiales fournissent un comportement de base simple et que tu es en JDK 8, tu peux faire un tour du côté des interfaces avec des implémentations par défaut : https://docs.oracle.com/javase/tutor...ltmethods.html


    En tout cas, je te confirme que mettre du SuppressWarning de tous les côtés n'est pas une solution adaptée
    Je ne suis pas mort, j'ai du travail !

  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
    tu as toujours le problème en définissant la méthode protected plutot que package private? Quand je vois une méthode package private, moi je m'attends pas à la voir surchargée.

    Edit: je viens de vérifier. La config par défaut de eclipse est "ignore" pour le unused method parameter. Donc si tu l'active c'est que tu ne veux pas de ce genre de chose, donc ne code pas ce genre de méthode, ou vis avec les suppressWarning, ou fait l'effot de documenter tes méthodes. Comme dit, tu n'a plus de warning si tu référence le paramètre via la javadoc.

    Java ne va pas te fournir un @overridable parce que ca n'a pas de sens. Toute méthode non final est overridable.

Discussions similaires

  1. Java annotations, récupérer la valeur
    Par ploxien dans le forum Langage
    Réponses: 3
    Dernier message: 30/04/2007, 12h07
  2. [java annotations] rien ne se passe!
    Par ploxien dans le forum Langage
    Réponses: 6
    Dernier message: 27/04/2007, 14h36
  3. [Java 5 - Annotations] Compilateur d'annotations
    Par petitpr dans le forum Langage
    Réponses: 2
    Dernier message: 20/03/2006, 15h39

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