gpt4 book ai didi

java - 确定对象的类型

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:22:59 25 4
gpt4 key购买 nike

如果我遇到这种情况:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com