Mise à jour: réponse Originale à cette question ci-dessous a été écrit sans vraiment comprendre la question, et, par conséquent, ne pas répondre directement à la question :)
Néanmoins, il doit être informatif pour ceux qui cherchent à comprendre l'utilisation générale de l' final
mot-clé.
Comme pour la question, je voudrais citer mon propre commentaire du dessous.
Je crois que vous n'êtes pas forcé de mettre en œuvre la finalité d'un argument pour vous laisser libre de décider si elle doit être définitive ou non dans votre propre mise en œuvre.
Mais oui, il semble plutôt étrange que vous pouvez déclarer final
dans l'interface, mais non définitif dans la mise en œuvre. Il aurait fait plus de sens que si:
un. final
mot-clé n'a pas été autorisé pour l'interface (résumé) arguments de méthode (mais vous pouvez l'utiliser dans la mise en œuvre), ou
b. le fait de déclarer un argument final
dans l'interface de l'obligerait à être déclarée final
dans la mise en œuvre (mais pas obligatoire pour les non-finale).
Je pense à deux raisons pour lesquelles une signature de méthode peut avoir final
paramètres: les Haricots et les Objets (en Fait, ils sont tous les deux la même raison, mais légèrement différents contextes.)
Objets:
public static void main(String[] args) {
StringBuilder cookingPot = new StringBuilder("Water ");
addVegetables(cookingPot);
addChicken(cookingPot);
System.out.println(cookingPot.toString());
// ^--- OUTPUT IS: Water Carrot Broccoli Chicken ChickenBroth
// We forgot to add cauliflower. It went into the wrong pot.
}
private static void addVegetables(StringBuilder cookingPot) {
cookingPot.append("Carrot ");
cookingPot.append("Broccoli ");
cookingPot = new StringBuilder(cookingPot.toString());
// ^--- Assignment allowed...
cookingPot.append("Cauliflower ");
}
private static void addChicken(final StringBuilder cookingPot) {
cookingPot.append("Chicken ");
//cookingPot = new StringBuilder(cookingPot.toString());
// ^---- COMPILATION ERROR! It is final.
cookingPot.append("ChickenBroth ");
}
L' final
mot-clé veillé à ce que l'on ne risque pas de créer un nouveau local de cuisine en pot, en montrant une erreur de compilation lorsque nous avons tenté de le faire. Cela a permis de faire le bouillon de poulet est ajouté à notre pot de la cuisine qui l' addChicken
méthode de got. Comparez cela à l' addVegetables
où nous avons perdu le chou-fleur, car il a ajouté qu'un nouveau local de la cuisson du pot au lieu de l'original pot il a obtenu.
Les haricots:
C'est le même concept que les objets (comme illustré ci-dessus). Les haricots sont essentiellement Object
s en Java. Cependant, beans (Ejb) sont utilisés dans diverses applications, comme un moyen pratique de stocker et de transmettre autour d'une collection de données connexes. Tout comme l' addVegetables
pourrait gâcher le processus de cuisson par la création d'un nouveau pot de la cuisine StringBuilder
et de le jeter avec le chou-fleur, il pourrait aussi faire de même avec un pot de la cuisine JavaBean.