怎么样设计一个处理元素为自定义基类的迭代器,而不是Object

Yanbin_Q 2003-10-21 09:20:35
像java有的那些迭代器add(Object o),Object get(index i)处理的都是根基类Object
我能不能实现某个接口,比如Collection或List,自写一个迭代器,处理的元素是自定义的基类,如方法add(Node node),Node get(index i)

方便就是实现多态,比如Node有两个子类NodeA,NodeB,用get(i)返回值就是Node,就能动态调用到NodeA或NodeB的方法,自动根据返回的具体子类
而用java提供的迭代器,返回值为Object还必须显式的转换为Node才行(Node)get(i);

意图也就是实现迭代器内部类型识别。
...全文
97 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
truezerg 2003-10-22
  • 打赏
  • 举报
回复
不好意思,这个方法要改一下

public Node next() throws Exception {
if(this.it.hasNext()) {
Object obj = it.next();
if(obj instanceof Node) {
return (Node)obj;
} else {
throw new Exception("元素不是Node类型或它的子类型");
}
}
}
truezerg 2003-10-22
  • 打赏
  • 举报
回复
to: whyxx(我也是新手)

他想要的是Iterator 的接口,你给他实现的时候应该按照Iterator的接口来做啊。
其实非常简单个事。

to: 楼主

你自己做一个类把Iterator再包装一下不就得了。 看下面的代码:

public class NodeIterator() {
private Iterator it;

public NodeIterator(Iterator it){
this.it = it;
}

public boolean hasNext() {
return this.it.hasNext();
}

public Node next() throws Exception {
if(this.it.hasNext()) {
if(it.next() instanceof Node) {
return (Node)it.next();
} else {
throw new Exception("元素不是Node类型或它的子类型");
}
}
}

public void remove() {
this.it.remove();
}
}
whyxx 2003-10-21
  • 打赏
  • 举报
回复
对于这个问题jdk1.5会有用泛型来解决,目前的话,应该很简单呀,自己实现一个
class temp {
List list = new ArrayList();

public Node get(int i) {
return (Node) list.get(i);
}

public add(Node node) {
list.add(node);
}
}
truezerg 2003-10-21
  • 打赏
  • 举报
回复
那你就自己定义一个Iterator的接口,让它返回你的Node类型,然后自己做个实现类来实现这个接口不就得了。

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧