Quelle est l'utilisation du mot clé final?
Dans le code ci-dessous, si je retire le mot-clé final de EditText je suis une erreur à la ligne (6) où je passe EditText objet (he) à l'intention...j'ai knw la signification du mot-clé final ici...
final EditText et=(EditText)findViewById(R.id.t);
Button b=(Button)findViewById(R.id.b1);
b.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v)<br>
{
Intent on=new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+et.getText()));
startActivity(on);
}
});
source d'informationauteur satheesh.droid
Vous devez vous connecter pour publier un commentaire.
C'est parce que vous utilisez la fermeture ici. Cela signifie que l'intérieur de la classe utilise le contexte de la inbounded. Utiliser les variables doivent être déclarées final, afin de ne pas être changé.
Voir plus ici.
Final essentiellement signifie que la variable
et
ne sera pas réattribué à tout moment et restera autour de. Cela signifie que les classes internes, à l'instar de votre écoute, de confiance, qui elle ne sera pas réattribué par un autre thread qui pourrait causer toutes sortes de problèmes.final peut également être utilisé pour modifier une méthode ou une définition de classe, cela voudrait dire que la méthode ne peut pas être remplacée par une sous-classe, ou que la classe ne peut pas être prolongé.
Lire cet article de comprendre les détails de mise en œuvre concernés:
EDIT:
La raison est de s'assurer que les utilisateurs se rendent compte que la fermeture "fermer", des variables et non des valeurs. Supposons qu'il n'y a pas d'obligation d'avoir final des variables locales. Puis on a pu écrire du code comme:
Que pensez-vous serait la sortie? Si vous pensez qu'il serait "0 1 2" vous aurait tort depuis le Praticable ferme au cours de la "variable" i et non pas la "valeur" de moi, à ce point dans le temps et donc le résultat sera "2 2 2". Ce qui peut être fait pour obtenir le comportement attendu d'ici? Deux solutions: soit s'appuyer sur les utilisateurs à avoir une compréhension de la façon dont les fermetures de travail ou d'une certaine manière de l'appliquer au niveau du langage. Et c'est la deuxième option avec laquelle la langue designers ont passé avec.
JFTR, je ne dis pas que la deuxième option est "la" façon de faire, c'est juste que le fait d'avoir des variables locales marqué comme final avant d'être utilisés dans les classes internes anonymes est un grand briseur d'affaire pour moi. Bien sûr, YMMV. 🙂
Final rend la variable et ne peuvent être attribués qu'une fois. Il modifie également la portée de la variable et permet à la fonction onClick visibilité pour et. Sans la dernière, et n'est pas visible au sein de la fonction onClick.
Le but de la “finale” du mot-clé dans JAVA peut être défini en trois niveau de la Classe, la Méthode, la variable
Voici un lien , qui traite de la
final
mot-clé. Selon la spécification (section 4.12.4):Il aide également à comprendre comment Java crée un anonyme intérieur de la classe. Comment Java implémente la classe particulière.
Java besoins de cette variable, pour être définitive, car le compilateur doit connaître le type de l'objet au moment de la compilation. Le compilateur génère un champ à l'intérieur de l'anonyme intérieure implémentation de la classe (dans ce cas la "et").
Si le type n'est pas définitive, comment le compilateur de déterminer comment construire l'intérieur de la classe de mise en œuvre. Fondamentalement, en déclarant le champ final, vous donnez le compilateur Java plus d'informations.
Code qui n'aide pas le compilateur, ne compile pas votre anonyme intérieure:
...
Avec le code ci-dessus, le compilateur Java ne peut pas vraiment construire l'anonyme intérieur de la classe.
Votre code:
final EditText et=(EditText)findViewById(R. id.t);
...
...
La java, le compilateur va créer un bytecode de la classe, l'implémentation de l'intérieur de la classe du bloc que vous avez prévu que pourrait ressembler à ceci.
Vous pouvez tester le pseudo-code que j'ai fourni par trouver l'anonyme du bytecode de la classe de 1 $et de décompiler que fichier bytecode.