ArrayStoreException
日本語 | 配列代入例外 |
英語 | array store exception |
ふりがな | あれいすとあえくせぷしょん |
フリガナ | アレイストアエクセプション |
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.lang.ArrayStoreException。
例外の一種。
配列に誤った型の要素を代入しようとした時に投げられる。
ただし、単に「配列に誤った型の要素を代入しよう」とした時には、コンパイルエラーとなる。例外が投げられるのは、サブクラスの配列への参照を、スーパークラスの配列の参照型変数に代入した場合、つまり「配列をアップキャスト」した場合である。この場合、代入時にもアップキャストが行われるため、コンパイルエラーは発生しないが、型が異なるため、実行時にArrayStoreException例外が投げられることになる。
ArrayStoreException例外は「配列版ClassCastException」と言える。
RuntimeExceptionクラスのサブクラスであるため、明示的にcatchやthrows指定する必要はない。
例外の一種。
配列に誤った型の要素を代入しようとした時に投げられる。
ただし、単に「配列に誤った型の要素を代入しよう」とした時には、コンパイルエラーとなる。例外が投げられるのは、サブクラスの配列への参照を、スーパークラスの配列の参照型変数に代入した場合、つまり「配列をアップキャスト」した場合である。この場合、代入時にもアップキャストが行われるため、コンパイルエラーは発生しないが、型が異なるため、実行時にArrayStoreException例外が投げられることになる。
ArrayStoreException例外は「配列版ClassCastException」と言える。
RuntimeExceptionクラスのサブクラスであるため、明示的にcatchやthrows指定する必要はない。
参考サイト
// Sample.java
public class Sample
{
public static void main( String[] args )
{
try
{
// たとえば、Stringクラスの配列に、
// Integerクラスを要素として入れると、
// コンパイルエラーになります。
String[] strings = new String[1];
// strings[0] = new Integer( 0 );
// コンパイルエラー:
// 型の不一致: Integer から String には変換できません。
// ところが、ポリモーフィズムを使って
// 「スーパークラスの配列」に入れてしまうと、
// コンパイルのチェックが通ってしまいます。
Object[] objects = strings;
objects[0] = new Integer( 0 );
}
catch( ArrayStoreException e )
{
e.printStackTrace();
// java.lang.ArrayStoreException
// at Sample.main(Sample.java:20)
// と、この場合はコンパイルエラーではなく
// ArrayStoreException例外が投げられるわけです。
}
}
}
public class Sample
{
public static void main( String[] args )
{
try
{
// たとえば、Stringクラスの配列に、
// Integerクラスを要素として入れると、
// コンパイルエラーになります。
String[] strings = new String[1];
// strings[0] = new Integer( 0 );
// コンパイルエラー:
// 型の不一致: Integer から String には変換できません。
// ところが、ポリモーフィズムを使って
// 「スーパークラスの配列」に入れてしまうと、
// コンパイルのチェックが通ってしまいます。
Object[] objects = strings;
objects[0] = new Integer( 0 );
}
catch( ArrayStoreException e )
{
e.printStackTrace();
// java.lang.ArrayStoreException
// at Sample.main(Sample.java:20)
// と、この場合はコンパイルエラーではなく
// ArrayStoreException例外が投げられるわけです。
}
}
}
// Sample.java public class Sample { public static void main( String[] args ) { try { // たとえば、Stringクラスの配列に、 // Integerクラスを要素として入れると、 // コンパイルエラーになります。 String[] strings = new String[1]; // strings[0] = new Integer( 0 ); // コンパイルエラー: // 型の不一致: Integer から String には変換できません。 // ところが、ポリモーフィズムを使って // 「スーパークラスの配列」に入れてしまうと、 // コンパイルのチェックが通ってしまいます。 Object[] objects = strings; objects[0] = new Integer( 0 ); } catch( ArrayStoreException e ) { e.printStackTrace(); // java.lang.ArrayStoreException // at Sample.main(Sample.java:20) // と、この場合はコンパイルエラーではなく // ArrayStoreException例外が投げられるわけです。 } } }