我有一个看起来像树的大型数据结构。我有一个实现所有树行为、链接、取消链接、导航等的根类 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 方法以实现这种具有完全类型安全性的机制——我假设消除了类参数。任何帮助,将不胜感激。