【问题标题】:Determining type of object确定对象的类型
【发布时间】:2016-09-06 14:41:10
【问题描述】:

如果我有这种情况:

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 的类型,我知道我需要实现一个我可以在接口中编写的函数,该函数将在两个类中实现,并且能够确定列表的末尾何时已经结束打。

【问题讨论】:

  • instanceof 就是你要找的东西
  • 是的,我调查过了,但有什么办法可以解决吗?
  • 你要么需要使用.equals()要么使用.instanceof(),==比较Java中的哈希码
  • @Gala 是的,我想过使用你提到的运算符,但有没有更简洁的方法来使用 OO 规则?
  • @Darshit 我想更清楚地了解更面向对象的方式,以便更多地了解如何处理这种情况

标签: java linked-list nodes


【解决方案1】:

您在此处处理实例。这意味着您可以在节点接口中放置一个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();
    }
}

这完全摆脱了ifstatement。

【讨论】:

    猜你喜欢
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多