Duplicata possible:
Pourquoi marquer les variables locales et les paramètres de méthode comme "finaux" en Java?
Je vérifiais du code Java, je ne suis pas bon en Java au moins j'ai une certaine connaissance de ce que fait final comme les classes scellées, les champs en lecture seule et non remplaçables) méthodes mais cela me semble bizarre, déclarant une variable final
dans les méthodes:
private static void queryGoogleBooks(JsonFactory jsonFactory, String query) throws Exception {
// Set up Books client.
final Books books = Books.builder(new NetHttpTransport(), jsonFactory)
.setApplicationName("Google-BooksSample/1.0")
.setJsonHttpRequestInitializer(new JsonHttpRequestInitializer() {
@Override
public void initialize(JsonHttpRequest request) {
BooksRequest booksRequest = (BooksRequest) request;
booksRequest.setKey(ClientCredentials.KEY);
}
})
.build();
Pourriez-vous me dire quelle est la signification de final
dans ce contexte?
Voici le code complet:
Il rend simplement la variable locale books
immuable. Cela signifie qu'il sera toujours une référence au même objet Book
en cours de création et de construction, et ne peut pas être modifié pour faire référence à un autre objet, ou null.
L'objet Book
lui-même est toujours modifiable, comme le montre la séquence d'appels d'accesseur. Seule la référence ne l'est pas.
Dans ce cas, final Books books
signifie simplement que books
doit se voir attribuer une valeur exactement une fois.
J'aime utiliser le mot clé final
comme celui-ci car il montre l'intention de la variable, que je trouve être une information précieuse lorsque l'on regarde le code car il supprime encore une autre variable de la situation ... pour ainsi dire.
Si je ne marque pas une variable comme final
alors elle se démarque comme quelque chose à garder à l'œil car elle va changer les valeurs bientôt. Ces informations sont utiles lorsque vous parcourez, par exemple, le code dans le débogueur ou que vous refactorisez et déplacez le code.
final
: Le dernier mot sur le mot-clé finalCela rend également la référence de variable en lecture seule. Il s'agit généralement de protéger le code contre toute modification accidentelle d'une variable qui ne doit pas changer.
Je suis presque sûr que cela ne signifie rien de plus que la variable books ne peut pas être écrasée plus tard dans la méthode.
Ce code utilise la classe anonyme JsonHttpRequestInitializer, où il fait référence à la variable locale dans la méthode queryGoogleBooks, le problème dans ce type de situation est que la méthode queryGoogleBooks pourrait retourner avant que la méthode d'initialisation de JsonHttpRequestInitializer soit terminée, où elle pourrait nettoyer la variable et pourrait entraîner l'échec de la méthode d'initialisation de JsonHttpRequestInitializer. Il est donc nécessaire de déclarer les variables comme finales dans ce type de situations. Pour plus de détails, reportez-vous à,