加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 确定对象的类型

发布时间:2020-12-15 04:34:12 所属栏目:Java 来源:网络整理
导读:如果我有这种情况: interface Node {}class EmptyNode implements Node {}class NotEmptyNode implements Node {} 现在我有另一个班, class List { Node n;} 我正在尝试做的是找到一种方法来确定获取节点列表大小的方法.我已经有了逻辑: public int getSiz
如果我有这种情况:

interface Node {}

class EmptyNode implements Node {}

class NotEmptyNode implements Node {}

现在我有另一个班,

class List {
  Node n;
}

我正在尝试做的是找到一种方法来确定获取节点列表大小的方法.我已经有了逻辑:

public int getSize(Node start) {
    if (start==EmptyNode) {  //Can't do this,not sure how to check if its an empty Node
        return 0;
    }
    else {
        return 1 + getSize(start.next()); //Want to add 1 and move to next Node
    }
}

由于EmptyNode和NotEmptyNode都是Node的类型,我知道我需要实现一个我可以在接口中编写的函数,该函数将在两个类中实现,并且能够计算列表末尾何时被命中.

解决方法

你在这里处理实例.这意味着您可以在节点接口中放置一个isEmpty()方法,并使用它来检查节点是否为空.

interface Node {
    boolean isEmpty();
}

class EmptyNode implments Node {
    @Override
    public boolean isEmpty() { return true; }
}

class NotEmptyNode implements Node {
    @Override
    public boolean isEmpty() { return false; }
}

...

public int getSize(Node start) {
    if (start.isEmpty()) {
        ...
    }
    else {
        ...
    }
}

另一个解决方案是让Node实现一个size()函数:

interface Node {
    int size();
    Node next();
}

class EmptyNode implements Node {
    @Overide
    public int size() {
        return 0;
    }
    ...
}

class NotEmptyNode implements Node {
    @Overide
    public int size() {
        return 1 + next().size();
    }
    ...
}

...

class List {
    Node n;

    public int getSize() {
        return n.size();
    }
}

哪个摆脱了if语句altogother.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读