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â
Partager