Question

J'utilise Gson pour analyser JSON. Ce que je ne comprends pas ce que le type de retour sera si vous ne surprenez pas Runtime Exception . Je me attendais à être null, mais ce ne sont pas null lors de l'évaluation d'une simple déclaration de if.

Mon code ressemble à ceci:

public X x(final String jsonString) {
   return gson.fromJson(jsonString, X.class);
}

puis d'une autre fonction que j'appelle la fonction:

public void y() {
  final X x = x();
  if (x == null) {
    System.out.println("x == null");
  }
}

Je me attendais x être nulle, mais ce n'est pas parce que la déclaration d'impression n'est pas appelé? Quelle est la valeur de x? J'ai résolu mon problème en utilisant un bloc catch dans la fonction x() et retour null à l'intérieur du bloc catch. Mais je me demande quelle est la valeur de la fonction x() est (le cas échéant?)? Si tout va bien je fais tout sens.

Était-ce utile?

La solution

Si x() est de lancer une exception, la variable x reste non initialisée, puisque le flux de contrôle a été interrompu. Sans try / catch, l'exception ne cesse d'augmenter la pile et x est jamais utilisable. Avec un try / catch, x est valable uniquement dans le bloc, donc si une exception se produit, il ne sera pas utilisable.

Si vous essayez de faire quelque chose comme:

X x;
try {
    x = x();
} catch(RuntimeException e) {}
if (x == null) {
    ...

vous obtiendrez l'erreur « variable x pourrait ne pas avoir été initialisé », car peut de flux de commande by-pass l'affectation

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top