Final affectation de variable avec try/catch

Parce que je crois que c'est une bonne programmation pratique, je fais toutes mes (local ou une instance) variables final s'ils sont destinés à être gravés qu'une seule fois.

Cependant, j'ai remarqué que lorsque une affectation de variable peut lever une exception, vous ne pouvez pas prendre cette variable final:

final int x;
try {
    x = Integer.parseInt("someinput");
}
catch(NumberFormatException e) {
    x = 42;  //Compiler error: The final local variable x may already have been assigned
}

Est-il un moyen de le faire sans avoir recours à une variable temporaire? (ou n'est-ce pas le bon endroit pour un modificateur final?)

  • Je doute que vous pouvez faire sans une variable temporaire.
  • final int x = makeX(); certainement. (try-catch dans la fonction)
  • Choquant que le JDK n'ai toujours pas de tryParse.
  • définitivement, mais il n'est pas pertinent dans ce cas depuis que j'ai juste utilisé le entier comme un exemple
  • J'ai pensé.
  • Pour être parfaitement clair, l'erreur de compilation est incorrect, n'est-il pas? Il n'y a aucune circonstance dans laquelle x peut être attribué à deux reprises dans l'exemple donné.
  • c'est beaucoup demander pour le compilateur pour obtenir qu'en général, lorsqu'il y a plusieurs lignes dans le bloc try où l'exception qui pourrait arriver. Il serait agréable d'avoir un cas exceptionnel pour cette fin, bien que, détection lorsque la cession est la dernière instruction dans l'essai.
  • Je pense que le vrai problème, c'est que Java est try-catch déclaration ne prend pas en charge un else cas comme le Python.

InformationsquelleAutor dtech | 2012-11-28