确定对象的类型

时间:2016-05-11 09:32:50

标签: java linked-list nodes

如果我有这种情况:

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的类型,我知道我需要实现一个我可以在接口中编写的函数,该函数将在两个类中实现,并且能够计算列表末尾的时间击中。

1 个答案:

答案 0 :(得分:7)

您正在使用此处的实例。这意味着您可以在节点接口中放置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。