51

継承したプログラムをデバッグしようとしています。このプログラムには、文字列、配列リストとコレクション、型間のキャストがたくさん含まれており、文字列の操作(substringなど)を行う必要があります。

コンソールに出力するとデータは文字列のように見えますJohnson, Johnが(たとえば、またはのようなテキスト行ですChicago Region)、コードがさまざまなindex out of rangeエラーでエラーになり、文字列にキャストするコードが機能していないことを示しています。

プログラムが期待どおりに動作していることを確認するために、どのデータ型が入力され、メソッドを離れているかを把握してみたいと思います。Javaでフィールドタイプを見つける方法はありますか?完璧な世界では、データ値と、それが文字列、配列リスト、コレクションのいずれであるかを示すコンソール出力をすべてのステップで生成できます。それはできますか?

4

5 に答える 5

79

任意のオブジェクトのインスタンスを指定すると、そのgetClass()メソッドを呼び出して、オブジェクトのタイプを記述するClassオブジェクトのインスタンスを取得できます。

Classオブジェクトを使用すると、そのタイプ名を簡単に出力できます。

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

この印刷は、クラスの完全修飾名をコンソールに表示します。例は次のとおりです。

java.lang.Integer

より簡潔な出力が必要な場合は、代わりに次を使用できます。

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

getSimpleName()は、クラスの名前のみを提供します。

Integer

プリミティブ変数のタイプの出力はもう少し複雑です。詳細については、このSOの質問を参照してください。

于 2012-05-03T20:11:04.227 に答える
8

任意のオブジェクトについてx、を印刷できますx.getClass()

于 2012-05-03T19:59:19.517 に答える
2

instance.getClass()タイプを印刷したいだけの場合に行く方法です。instanceofタイプに基づいて動作を分岐する場合にも使用できます。

if ( x instanceof String )
{
   // handle string
}
于 2012-05-03T20:03:25.197 に答える
2

メソッドを使用しgetClass()ます。

Object o;
System.out.println(o.getClass());
于 2012-05-03T20:03:53.953 に答える
0

.class.getName();任意のオブジェクトで行うだけです

于 2012-05-03T20:00:13.757 に答える