継承したプログラムをデバッグしようとしています。このプログラムには、文字列、配列リスト、コレクション、型間のキャストが多く含まれています。いくつかの文字列操作(substring
など)が必要です。
データlookコンソールに出力されるときの文字列(たとえば、Johnson, John
やChicago Region
などのテキスト行)ですが、さまざまなindex out of range
エラー。Stringにキャストするコードが機能していないことを示しています。
プログラムが期待どおりに動作していることを確認するために、どのデータ型が入力され、メソッドを終了するのかを把握したいと思います。 Javaでフィールドタイプを見つける方法はありますか?完璧な世界では、データ値と、それが文字列、配列リスト、コレクションのいずれであるかを示すすべてのステップでコンソール出力を生成できました。それはできますか?
任意のオブジェクトのインスタンスを指定すると、その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
プリミティブ変数のタイプの印刷はもう少し複雑です:詳細については this SO question を参照してください。
任意のオブジェクトx
に対して、x.getClass()
を出力できます。
任意のオブジェクトで.class.getName();
するだけです
instance.getClass()
は、タイプを印刷するだけの場合の方法です。タイプに基づいて動作を分岐する場合は、instanceof
を使用することもできます。
if ( x instanceof String )
{
// handle string
}
getClass()
メソッドを使用します。
Object o;
System.out.println(o.getClass());