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我想更清楚地看看更面向对象的方法,只是想更清楚地了解如何处理这种情况