Comment tester si une variable est définie?

En PHP, il y a une fonction isset. Ce que Java? Je pense que je peux utiliser == null avec des objets, mais qu'en est-il des types de valeur comme int

25
demandé sur Jiew Meng 2011-10-09 16:53:02

7 réponses

Le compilateur Java ne vous laissera pas définir des variables et les utiliser avant qu'une valeur leur soit attribuée, donc le problème n'existe pas sous la même forme qu'en php.

Modifier

Si dans votre cas le compilateur ne vous a pas déjà arrêté (parce que c'est par exemple une variable d'instance) la meilleure solution est probablement d'initialiser la variable à une valeur "spéciale" comme suggéré par Guest11239193. Comme ceci:

int x = 0; // because by convention 0 is a reasonable default here

Bien sûr, quelle est la valeur d'initialisation "sûre et raisonnable" dépend de l'application.

Après, vous pourriez

if (x == 0) { // only allow setting if x has its initial value
    x = somenewvalue;
}

Ou vous pouvez accéder à x via un setter qui empêche de changer plus d'une fois (probablement exagéré dans la plupart des cas):

private int x;
private boolean x_was_touched = false;

public void setX (int newXvalue) {
    if (!x_was_touched) {
       x = newXvalue;
       x_was_touched = true;
    }
}

public int getX() {
    return x;
}

Vous pouvez également utiliser un Integer, le frère de l'objet int, qui peut être initialisé à null

Integer x = null; 

Cependant, le fait que vous pensez avoir besoin de cette connaissance peut cacher une faille logique plus profonde dans votre programme, donc je vous suggère d'explorer la raison pour laquelle vous voulez savoir si une valeur primitive (primitif par opposition aux objets, int vs Integer) n'a pas été touché.

26
répondu fvu 2011-10-09 13:58:27

Une variable non existante n'existe pas en Java.

11
répondu Mob 2011-10-09 13:01:46

En Java, c'est une erreur du compilateur d'utiliser une variable sans être définie.

Les variables de classe et d'instance sont initialisées avec ce qui est considéré comme une valeur "null" par défaut, en fonction du type de données.

Donc une fonction isset comme n'a pas de sens.

5
répondu Paulo Pinto 2018-02-09 05:02:58

Vous ne pouvez pas vérifier si la variable est définie. Vous pouvez:

  1. initialisez la variable qui a du sens en tant que valeur initiale-telle 0 pour un compteur, la valeur entière maximale si vous calculez un minimum, etc.
  2. initialisez la variable à une valeur que vous n'allez pas utiliser, par exemple -1 si vous allez utiliser des valeurs entières non signées et une chaîne vide pour une chaîne.
  3. introduisez un indicateur booléen qui indique si vous avez commencé à faire quelque.
3
répondu Guest11239193 2011-10-09 12:59:37

Par Défaut pour int sera 0 et de string sera "".

1
répondu Asdfg 2012-08-02 14:05:43

Vous pouvez essayer d'utiliser un Objet au lieu d'une valeur primitive, c'est à dire


Integer x = null;
...
public Integer getX(){
   if(x == null) {
      x = new Integer(10);
   }
   return x;
}
0
répondu emt14 2011-10-10 09:48:19

Créez vos fonctions pour ce contrôle car chaque objet a ses propres règles sur "isset () result";

Exemples :

    public static final boolean isEmpty(String x) {
        return (x == null || x.trim().equals(""));
    }
    public static final boolean isEmpty(Integer x) {
        return (x == null || x == 0);
    }
    public static final boolean isEmpty(Long x) {
        return (x == null || x == 0);
    }
    public static final boolean isEmpty(Collection<?> x) {
        return (x == null || x.size() == 0);
    }
    public static final boolean isEmpty(Map<?,?> x) {
        return (x == null || x.size() == 0);
    }
    public static final boolean isEmpty(Object[] x) {
        return (x == null || x.length == 0);
    }
0
répondu hurricane 2016-02-04 08:46:23