2012-05-03 11 views
20

Próbuję debugować program, który odziedziczyłem. Program ten zawiera struny, list tablic i kolekcji, dużo odlewania pomiędzy typami, a muszę zrobić pewne manipulacje String (substring, etc.)Czy istnieje sposób na wyprowadzenie typu danych Java do konsoli?

Dane wyglądają jak struny po wydrukowaniu do konsoli (np to linia tekstu, taka jak Johnson, John lub Chicago Region), ale mój kod jest błędny z różnymi błędami index out of range, co sugeruje, że mój kod do przesłania do String nie działa.

Chciałbym spróbować dowiedzieć się, jakie rodzaje danych wchodzą i kończą moje metody, aby sprawdzić, czy program działa zgodnie z oczekiwaniami. Czy istnieje sposób na znalezienie typu pola w Javie? W idealnym świecie mógłbym generować dane wyjściowe konsoli w każdym kroku, który dałby mi wartość danych i czy jest to ciąg, lista tablic lub kolekcja. Czy to możliwe?

+1

Nawiasem mówiąc, jeśli nie dostajesz 'ClassCastException', to rzutowanie na' String' * działa *. –

Odpowiedz

37

Biorąc pod uwagę wystąpienie dowolnego obiektu, można nazwać to metoda getClass(), aby uzyskać instancję obiektu klasy, które opisują rodzaj obiektu.

Korzystanie z obiektu klasy, można łatwo wydrukować to nazwa typu:

Integer number=Integer.valueOf(15); 
System.out.println(number.getClass().getName()); 

Ten druk pocieszyć pełną nazwę klasy, która dla przykładu jest:

java.lang.Integer 

Jeśli chcesz uzyskać bardziej zwięzłe dane wyjściowe, możesz zamiast tego użyć:

Integer number=Integer.valueOf(15); 
System.out.println(number.getClass().getSimpleName()); 

getSimpleName() daje tylko nazwa klasy:

Integer 

Drukowanie typ zmiennych pierwotnych jest nieco bardziej skomplikowana: zobacz this SO question szczegóły.

5

Dla każdego obiektu x można wydrukować x.getClass().

+1

Zrobiłbym x.getClass.getName() –

+0

Co z instancjami 'null'? –

+0

@PaulVargas 'if (object == null) {sout (" null ")}' – Mob

0

Wystarczy zrobić .class.getName(); w dowolnym obiekcie

0

instance.getClass() jest droga, jeśli chcesz po prostu wydrukować ten typ. Możesz także użyć instanceof, jeśli chcesz rozgrupować zachowanie na podstawie typu, np.

if (x instanceof String) 
{ 
    // handle string 
} 
0

Użyj metody getClass().

Object o; 
System.out.println(o.getClass()); 
Powiązane problemy