Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 确定对象类型_Java_Linked List_Nodes - Fatal编程技术网

Java 确定对象类型

Java 确定对象类型,java,linked-list,nodes,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 t

如果我有这种情况:

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

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

另一种解决方案是让
节点
实现
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。

instanceof
就是你要找的是的,我查过了,但有什么办法吗?你需要使用.equals()或.instanceof(),==在Java@Gala是 啊我曾想过使用你提到的操作符,但有没有更干净的方法来使用OO规则呢?@Darshit我想更清楚地看看更面向对象的方法,只是想更清楚地了解如何处理这种情况