キャスト→型マッチング
型マッチングを構文に含めば*1ダウンキャストを無くせるような気がする。
if( object instanceof TypeA){ TypeA objectAsTypeA = (TypeA) object; // do Something. } else if( object instanceof TypeB){ TypeB objectAsTypeB = (TypeB) object; // do Something. } else { // do Something. }
↓コード量が減ると同時に意味付けが明確になった。
matchingWithType(object){ TypeA:{ // do Something. } TypeB:{ // do Something. } default:{ // do Something. } }
*1:別に構文である必要はないか。