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
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é.
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.
Vous ne pouvez pas vérifier si la variable est définie. Vous pouvez:
- 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. - 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. - introduisez un indicateur booléen qui indique si vous avez commencé à faire quelque.
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;
}
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);
}