J'essaie de déboguer un programme dont j'ai hérité. Ce programme contient des chaînes, des listes et des collections de tableaux, beaucoup de transtypages entre les types, et j'ai besoin de faire quelques manipulations de chaînes (substring
, etc.)
Les données look comme des chaînes lorsqu'elles sont imprimées sur la console (par exemple, c'est une ligne de texte, comme Johnson, John
ou Chicago Region
), mais mon code contient des erreurs avec divers index out of range
erreurs, suggérant que mon code à convertir en chaîne ne fonctionne pas.
Je voudrais essayer de comprendre quels types de données entrent et sortent de mes méthodes pour vérifier que le programme fonctionne comme prévu. Existe-t-il un moyen de trouver un type de champ en Java? Dans un monde parfait, je pourrais générer une sortie console à chaque étape qui me donnerait la valeur des données et qu'il s'agisse d'une chaîne, d'une liste de tableaux ou d'une collection. Cela peut-il être fait?
Étant donné une instance de n'importe quel objet, vous pouvez appeler sa méthode getClass () pour obtenir une instance de l'objet Class qui décrit le type de l'objet.
En utilisant l'objet Class, vous pouvez facilement imprimer son nom de type:
Integer number=Integer.valueOf(15);
System.out.println(number.getClass().getName());
Cette impression pour consoler le nom complet de la classe, qui est par exemple:
Java.lang.Integer
Si vous voulez une sortie plus concise, vous pouvez utiliser à la place:
Integer number=Integer.valueOf(15);
System.out.println(number.getClass().getSimpleName());
getSimpleName () ne vous donne que le nom de la classe:
Integer
L'impression du type de variables primitives est un peu plus complexe: voir this SO question pour plus de détails.
Pour tout objet x
, vous pouvez imprimer x.getClass()
.
Faites simplement .class.getName();
dans n'importe quel objet
instance.getClass()
est la voie à suivre si vous souhaitez simplement imprimer le type. Vous pouvez également utiliser instanceof
si vous souhaitez dériver le comportement en fonction du type, par exemple.
if ( x instanceof String )
{
// handle string
}
Utilisez la méthode getClass()
.
Object o;
System.out.println(o.getClass());