2009-02-18 6 views

Répondre

47

Comme vous le décrivez, @Override crée une vérification à la compilation qu'une méthode est substituée. Ceci est très utile pour s'assurer que vous n'avez pas un problème de signature stupide lorsque vous essayez de contourner.

Par exemple, j'ai vu l'erreur suivante:

public class Foo { 
    private String id; 
    public boolean equals(Foo f) { return id.equals(f.id);} 
} 

Cette classe compile comme il est écrit, mais en ajoutant l'étiquette @Override à la méthode equals provoquera une erreur de compilation car elle ne remplace pas la méthode equals sur l'objet. Ceci est une erreur simple, mais il peut échapper à l'œil même d'un développeur chevronné

+0

@AngryDuck c'est parce que vous utilisez 3 points d'interrogation. – Det

21

Il ne fait pas que vérifier le compilateur - bien que cela soit suffisant pour le rendre utile; il documente également l'intention du développeur. Par exemple, si vous substituez une méthode mais ne l'utilisez nulle part dans le type lui-même, quelqu'un qui viendra au code plus tard peut se demander pourquoi il est là. L'annotation explique son but.

+2

Je me demandais quels étaient vos points de réputation lorsque vous avez répondu à cette question. –

+0

@OmarTariq: À première vue, environ 50K je soupçonne. –

+0

@OmarTariq Moi aussi :) J'ai voté votre commentaire ... –

2

Nope - sauf qu'il améliore également la lisibilité (par exemple en plus de tout indicateur votre IDE utilise, il est facile de repérer qu'une méthode remplace une déclaration dans la superclasse)

10

Non, vous l'avez à peu près cloué.

@Override indique au compilateur votre intention : si vous marquez une méthode @Override, vous aviez l'intention de passer outre quelque chose de la superclasse (ou interface, en Java 6). Un bon IDE va ​​utilement marquer toute méthode qui remplace une méthode sans @Override, donc la combinaison des deux aidera à s'assurer que vous faites ce que vous essayez de faire.