木のように見える大きなデータ構造があります。すべてのツリー動作、リンク、リンク解除、ナビゲートなどを実装するルートクラスTreeElementがあります。ツリー内の実際のノードは、TreeElementクラスの特殊なサブクラスになります。特定の親ノードには、複数のタイプの子があります。サンプルツリーは次のとおりです。
NodeTypeA
+ NodeTypeB
+ NodeTypeC
+ NodeTypeC
+ NodeTypeB
+ NodeTypeC
+ NodeTypeD
+ NodeTypeE
ご覧のとおり、NodeTypeAにはタイプBとD(および場合によっては他の子)の子があり、NodeTypeBにはC(および場合によっては他の子)の子があります。NodeTypeDには、タイプE(および場合によっては他の子)の子があります。これらはすべてTreeElementのサブクラスです。専門のサブクラスは、彼らが持つことを許可されている子供の種類についてある程度の知識を持っています。
基本タイプTreeElementにはメソッドがあります
Vector getChildren(String kind, Class nodeType);
これは、kindの値でマークされ、渡されたクラスで指定されたクラスのすべての子で満たされたベクトルを返します。返されるベクトルには、渡されたクラスの要素が常に含まれます。問題は、右を実装しようとしていることです。一種の型安全性であり、これにJavaの動的型付け機能を使用する方法は私にはわかりません。
NodeTypeAクラスで、NodeTypeBの子を取得する次のようなメソッドが必要です。
Vector<NodeTypeB> getSpecialChildren() {
Vector<NodeTypeB> vb = getChildren("special", NodeTypeB.class);
return vb;
}
上記を書くと、Eclipseで型キャストが必要であるという警告が表示されます。だから私は型キャストを追加することができます:
Vector<NodeTypeB> getSpecialChildren() {
Vector<NodeTypeB> vb = (Vector<NodeTypeB>) getChildren("special", NodeTypeB.class);
return vb;
}
しかし、私には「不要なキャストを削除する」Eclipseの機能もあり、この機能はこのキャストを削除します。Eclipseがそれを不要と見なすのはちょっと奇妙に思えますが、そこにない場合は警告します。しかし、それはただの煩わしさです。
私が本当にやりたいのは、Javaの動的型メカニズム(これは「制限付き型パラメーター」ですか?)を使用して、これを正しく機能させることです。TreeElementクラスでgetChildrenメソッドを宣言して、このメカニズムを完全な型安全性で実現する方法を理解できません。クラスパラメーターを削除することを想定しています。どんな助けでもいただければ幸いです。