java - 确定对象的类型

标签 java linked-list nodes

如果我遇到这种情况:

interface Node {}

class EmptyNode implements Node {}

class NotEmptyNode implements Node {}

现在我有另一个类(class),

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

最佳答案

您正在处理这里的实例。这意味着您可以在节点接口(interface)中放置一个 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 语句。

关于java - 确定对象的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37158522/

相关文章:

java - 如何在java中执行cURL语句从kibana获取JSON

复制链表并返回指向新链表的指针

c# - 应该使用 : array vs linked list?

.net - 需要帮助理解 TreeNodeCollection 的 .Net Collection 行为

java - java ConcurrentHashMap中的segmentMask是什么意思

java - 在ImageReader的OnImageAvailable中更新MainActivity的TextView

java - java中检查两个链表是否相等

java - firstLast Java链表/节点

c - curr_node.ptr = &(next_node.ptr); 之间的区别和 curr_node.ptr = &next_node

java - 通过 JNI 调用 Collections.sort