Perspectives d'écran Android Final vs Private

Simple question peut-être stupide. J'ai une activité de connexion qui lance une autre activité, et voici le code:

public class LoginActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login); ActionBar actionBar = getActionBar(); actionBar.hide(); Button btnLogin = (Button) findViewById(R.id.btnLogin); final TextView tvUsername = (TextView) findViewById(R.id.tvUsername); final TextView tvPassword = (TextView) findViewById(R.id.tvPassword); btnLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (tvUsername.getText().toString().length()<1) { Toast msg = Toast.makeText(LoginActivity.this, "Enter a Username", Toast.LENGTH_LONG); msg.setGravity(Gravity.TOP|Gravity.LEFT, 0, 70); msg.show(); tvUsername.requestFocus(); } else if (tvPassword.getText().toString().length()<1) { Toast msg = Toast.makeText(LoginActivity.this, "Enter a Password", Toast.LENGTH_LONG); msg.setGravity(Gravity.TOP|Gravity.LEFT, 0, 200); msg.show(); tvPassword.requestFocus(); } else { startActivity(new Intent(LoginActivity.this,CrewScheduleActivity.class)); finish(); } } }); } } 

Ma question concerne les aperçus de texte. Eclipse a essentiellement dit que je devais les finaliser pour les utiliser dans l'événement onClick du bouton. NP, j'ai donc fait ça et ça a fonctionné.

  • ClassNotFoundException: n'a pas trouvé de classe sur le chemin d'accès: DexPathList
  • Android 6: ne peut plus partager de fichiers?
  • Android / gradle: incluez le nom de la version de la saveur dans le nom de fichier apk
  • Obtenir une nouvelle position de coordonnées après la rotation avec Matrix
  • Erreur RxJavaPlugins n'a pas trouvé la classe "com.google.devtools.build.android.desugar.runtime.ThrowableExtension"
  • L'erreur d'initialisation SDL, raison est: Aucun périphérique vidéo disponible
  • La question est Quelle est la différence entre mettre ci-dessus le @Override comme privé vs à l'intérieur de OnCreate comme final?

  • Marge de bouton personnalisé Android
  • Comment surveiller les demandes HTTP (obtenir, publier, etc.) que mon application fait dans Android
  • Comment utiliser les bibliothèques natives 32 bits sur un appareil Android 64 bits
  • Enregistrer la sortie audio Android
  • Android Studio: Comment "Actualiser" après avoir ajouté un fichier?
  • Obtenir un nombre de fichiers dans un répertoire et ses sous-répertoires
  • 2 Solutions collect form web for “Perspectives d'écran Android Final vs Private”

    Cela concerne la fermeture en Java . Fondamentalement, lorsque vous utilisez une classe anonyme, les valeurs (et non les objets eux-mêmes) utilisés sont copiées dans cette classe pour utilisation. Par conséquent, il n'est pas logique de renvoyer ou de modifier ces variables dans la classe, donc elles doivent être final .

    Cependant, si la variable est plutôt une partie de la classe contenant la classe anonyme, c'est différent. Fondamentalement, votre classe interne a une référence à l'objet LoginActivity (comme LoginActivity.this ), et peut utiliser et modifier ses membres et ses méthodes.

    Lorsque vous les mettez "au-dessus de @Override", vous LoginActivity variables membres de la classe LoginActivity . Par conséquent, ils peuvent être consultés par la classe anonyme.

    De façon succincte, la différence est que: les variables final sont locales à la méthode et copiées dans la classe anonyme; Les variables membres sont locales dans la classe contenant et sont modifiées par la classe anonyme.

    Si vous souhaitez réutiliser les données de la classe anonyme plus tard, utilisez une variable membre. Si vous en avez besoin uniquement dans onCreate() et la classe anonyme, une variable final suffira.

    Lorsque vous déclarez le champ TextView (ou tout domaine pour ce sujet) comme public, il peut être consulté directement par une autre classe, ce qui, je ne crois pas, est votre intention; Il n'y a aucune raison de rendre publique la variable TextView.
    Si elle est définie comme privée, il est garanti que sa valeur ne sera pas annulée dans une autre classe, ce que le mot-clé final a été conçu pour faire en premier lieu. Donc, il suffit de le définir comme privé, et vous ne devrez pas vous soucier d'Eclipse vous corriger.
    Donc, en résumé: rendre le champ privé / final assure que la valeur ne peut pas être remplacée par une autre classe, ce qui est une bonne conception.

    J'espère que cette randonnée les aide. Je serai ravi de le clarifier mieux si ce n'est pas le cas.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.