160 votes

Comment vérifier le type d'une variable en Java ?

Comment puis-je vérifier que ma variable est un int, un tableau, un double, etc... ?

Edit : Par exemple, comment puis-je vérifier qu'une variable est un tableau ? Existe-t-il une fonction pour le faire ?

1 votes

Jetez un coup d'œil à la API de réflexion .

1 votes

Question très proche avec des réponses ici : stackoverflow.com/questions/2674554/ .

0 votes

Cela répond-il à votre question ? Comment connaître le type d'une variable en java ?

132voto

pkaeding Points 12935

Java étant un langage à typage statique, le compilateur effectue la plupart de ces vérifications pour vous. Dès que vous déclarez qu'une variable est d'un certain type, le compilateur s'assure que seules des valeurs de ce type (ou des valeurs qui sont des sous-types de ce type) lui sont attribuées.

Les exemples que vous avez donnés (int, array, double) sont tous des primitives, et il n'en existe pas de sous-types. Ainsi, si vous déclarez qu'une variable est un int :

int x;

Vous pouvez être sûr qu'il ne contiendra jamais que int valeurs.

Si vous avez déclaré une variable comme étant un List Cependant, il est possible que la variable contienne des sous-types de List . En voici quelques exemples ArrayList , LinkedList etc.

Si vous aviez un List et vous aviez besoin de savoir s'il s'agissait d'une ArrayList vous pouvez faire ce qui suit :

List y;
...
if (y instanceof ArrayList) { 
  ...its and ArrayList...
}

Toutefois, si vous vous dites que vous devez le faire, vous devriez peut-être revoir votre approche. Dans la plupart des cas, si vous suivez les principes de l'orientation objet, vous n'aurez pas besoin de le faire. Il y a, bien sûr, des exceptions à toutes les règles.

4 votes

L'opérateur instanceof détermine uniquement le type de données de l'objet auquel la variable fait référence. Il ne détermine pas le type de données de la VARIABLE réelle, comme demandé à l'origine.

50voto

Mvcoile Points 87

En fait, il est assez facile de créer son propre testeur, en abusant de la capacité de surcharge des méthodes de Java. Mais je suis quand même curieux de savoir s'il existe une méthode officielle dans le SDK.

Exemple :

class Typetester {
    void printType(byte x) {
        System.out.println(x + " is an byte");
    }
    void printType(int x) {
        System.out.println(x + " is an int");
    }
    void printType(float x) {
        System.out.println(x + " is an float");
    }
    void printType(double x) {
        System.out.println(x + " is an double");
    }
    void printType(char x) {
        System.out.println(x + " is an char");
    }
}

alors :

Typetester t = new Typetester();
t.printType( yourVariable );

32 votes

Ce n'est pas une bonne méthode. Que se passe-t-il si je passe un type arbitraire qui n'est pas défini dans votre classe Typetester - dans cet exemple String, par exemple ?

11 votes

@TashPemhiwa puis ajoutez String et Object aux choix. La créativité et la résolution de problèmes sont les meilleurs atouts des programmeurs.

15 votes

Cependant, cela ne peut traiter qu'un ensemble fixe de classes prédéfinies (ce qui va à l'encontre du but de l'orientation objet/polymorphisme) et ne donnera que quelque chose comme "classe inconnue" pour les objets de toute autre classe.

36voto

Glen Pierce Points 1417

a.getClass().getName() - vous donnera le type de données de l'objet auquel il est fait référence par a mais pas le type de données que la variable a a été déclaré à l'origine comme étant ou ultérieurement transformé en.

boolean b = a instanceof String - vous indiquera si l'objet auquel il est fait référence par a est une instance d'une classe spécifique. Encore une fois, le type de données que la variable a a été déclarée à l'origine comme ou a été castée par la suite n'a aucune incidence sur le résultat de l'opérateur instanceof.

J'ai pris cette information de : Comment connaître le type d'une variable en java ?

Cela peut arriver. J'essaie d'analyser un String en un int et j'aimerais savoir si mon Integer.parseInt(s.substring(a, b)) envoie un int ou un déchet avant que j'essaie de le résumer.

Au fait, c'est ce qu'on appelle la réflexion. Voici quelques informations supplémentaires sur le sujet : http://docs.oracle.com/javase/tutorial/reflect/

25voto

Debayan Points 181

Il suffit d'utiliser :

.getClass().getSimpleName();

Exemple :

StringBuilder randSB = new StringBuilder("just a String");
System.out.println(randSB.getClass().getSimpleName());

Sortie :

StringBuilder

2 votes

Je suggère de noter que cela ne fonctionne pas si randSB tient NULL.

16voto

Frozen Spider Points 2369

Vous pouvez travailler avec Integer au lieu de int, Double au lieu de double, etc. (de telles classes existent pour tous les types primitifs). Ensuite, vous pouvez utiliser l'opérateur instanceof, par exemple if(var instanceof Integer){...}

2 votes

Tout ce dont nous avons besoin est un cas d'utilisation valide.

0 votes

Cela semble être l'approche la plus efficace.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X