
初歩的な質問で恐縮なのですが、javaのダウンキャストの記述で良い方法がないか悩んでいます。
とある親クラスから、複数の子クラスを継承して作っています。
java
1public class Parent { 2 ~ 3} 4 5@Document(collection = "child1") 6public class Child_1 extends Parent { 7} 8 9@Document(collection = "child2") 10public class Child_2 extends Parent { 11} 12 13@Document(collection = "child3") 14public class Child_3 extends Parent { 15}
それぞれ子クラスは親クラスを継承しておりますが、追加の要素やメソッドはありません。
spring bootで各childをmongoDBの各コレクションに紐付けていることから、わざわざ分けています。
そのため代入する中身を作成するメソッドは1つです。
java
1public ArrayList<Parent> make(引数) { 2 ~ 3}
上記のメソッドの返り値を状況次第で、Child_1・Child_2・Child_3にダウンキャストしてDBに保存する必要があります。
ここで2つ疑問がございます。
1. そもそもダウンキャストは、各要素を一つ一つ代入するしかないのでしょうか。
java
1例) 2Child_1 child_1 = new Child_1(); 3child_1.setHoge1(parent.getHoge1()); 4child_1.setHoge2(parent.getHoge2()); 5 ・・・
操作や属性が結構あるので、各childごとに上記設定をすることはさすがに手間がかかるなと感じました。
「Child_1 child_1 = (Child_1)parent;」だと案の定ClassCastExceptionになりました。
2. ArrayList内のクラスのキャストで、リーダブルな記述方法はないでしょうか。
現在は都度以下のように繰り返しで要素を逐次変換しかないのかなと考えております。
java
1ArrayList<Parent> parentList = make(~); 2 3ArrayList<Child_1> CastList = new ArrayList<>(); 4for (Parent parent : parentList) { 5 ダウンキャスト処理 6 CastList.add(~); 7} 8 9ArrayList<Child_2> CastList = new ArrayList<>(); 10for (Parent parent : parentList) { 11 ダウンキャスト処理 12 CastList.add(~); 13} 14 15ArrayList<Child_3> CastList = new ArrayList<>(); 16for (Parent parent : parentList) { 17 ダウンキャスト処理 18 CastList.add(~); 19}
以上、お願いいたします。


回答2件
あなたの回答
tips
プレビュー