2013-10-12 6 views
-1

Je viens de rencontrer une syntaxe que je n'avais jamais vue auparavant, et comme il est assez difficile de trouver des réponses sur Google, j'ai décidé de poser une question. La déclaration en question est:Que fait ce code java?

EditText editText = (EditText) findViewById(R.id.edit_message); 

Je sais que le code crée un objet « editText » de la classe EditText, mais je ne l'ai jamais vu le code après le signe égal avant. Ma meilleure estimation est qu'il exécute la méthode findViewById(), et que ce message est présent dans la classe EditText, c'est pourquoi l'EditText entre parenthèses est nécessaire?

Je sais que je devrais probablement connaître cette syntaxe maintenant, comme je viens de finir mon premier cours de java à l'université de CS, mais malheureusement nous n'avons jamais été présentés à quelque chose comme ceci.

Merci beaucoup.

+2

http://developer.android.com/reference/android/app/Activity.html est la première réponse ici pour 'findViewById', et cela vaut la peine d'être lu si vous voulez entrer dans le développement Android. –

+0

Ceci est une syntaxe android de trouver des éléments qui ont été déclarés dans le fichier xml. Je vous suggère de passer par developer.android.com afin d'apprendre la programmation Android, au moins afin que vous vous familiariser avec cette syntaxe. –

+0

Je pense que EditText est une classe et findViewbyId doit retourner quelque chose qui doit être casté en classe EditText. – Miller

Répondre

2

Il s'agit d'un transtypage, qui oblige le compilateur à supposer que le résultat renvoyé par la fonction findViewById est un objet EditText.

S'il s'agit d'un autre type, vous obtiendrez une erreur d'exécution.

Here's the offical docs on the subject.

+0

Merci beaucoup pour l'explication et le lien vers la documentation :) – user680881

+0

J'ajouterais que cela ne fonctionne que si EditText est une sous-classe de View, qui est le type retourné par findViewById; sinon le compilateur va lancer une erreur, puisqu'il connaît le type retourné par la méthode. Et une autre façon de mettre "forcer le compilateur à supposer que" serait "dire au compilateur de traiter" – arcy

0

Il est utilisé pour la création de zone de texte dans lequel vous pouvez saisir votre requête, dans ce code findViewById est une méthode qui retourne un objet while (EditText) est utilisé pour la coulée et comme ici l'objet retourné est tapez edittext thats pourquoi nous sommes enregistrer dans un edittext variable de type EDITTEXT.

2

findViewById retourne un View, donc

EditText editText = findViewById(R.id.edit_message); 

lancera une exception compilation vous dire que vous ne pouvez pas attribuer un View à une variable EditText.

(EditText) est coulée de type View-EditText, autrement dit, vous dites au compilateur qu'il est sûr d'affecter le résultat de findViewById au EditText, comme vous attendre à ce que edit_message vue est en fait un objet EditText. Enfin, si vous «mentir» au compilateur et edit_message n'est pas un EditText, vous pourrez compiler et exécuter, mais vous obtiendrez un ClassCastException.