スーパークラスを拡張するクラスSubClass1とSubClass2があるとします。 SuperClassを拡張しているすべてのオブジェクトをリスト(Listリスト)に格納する必要があります。今度はリストを関数に渡します。これはSuperClassが以前にあったSubClassを把握することができます。この関数は、SuperClassをそれぞれのサブクラスに戻す必要があります。たとえば、スーパークラスとしてサブクラスオブジェクトを格納し、後でサブクラスを取得する
for (SuperClass superClass : list) {
if (superClass.getType().equals("SubClass1")
SubClass1 subClass = (SubClass1) superClass;
else if (superClass.getType().equals("SubClass2")
SubClass2 subClass = (SubClass2) superClass;
}
この例では、クラスキャストの例外が発生します。この機能を実現する簡単なソリューションはありますか?
EDIT:答えの1つに記載されているとおり、このコードでは例外が発生するはずです。この例のgetType()メソッドで何かが間違っていなければなりません。ただし、キーワードinstanceofを使用することで、getType()メソッドが不要になるため、この問題を解決できます。