我必须为学校项目编写代码,为此,他们为我们提供了一些界面来帮助我们设计类实现。
INode
就是其中之一:
public interface INode {
void buildString(StringBuilder builder, int tabs);
}
我们必须多次实现这个界面。
BlockNode
就是其中之一:
public class BlockNode implements INode {
@Override
public void buildString(StringBuilder builder, int tabs) {
}
}
现在我的问题是在main函数中他们这样做(解析的类型是INode):
root = parser.parse();
builder = new StringBuilder();
builder.append("PARSE TREE:\n");
root.buildString(builder, 0);
我没有得到
的实施buildString(StringBuilder builder, int tabs)
被调用。 它可能是我上面写的那个(BlockNode)?或我实施的任何其他?我不明白先叫哪一个......
答案 0 :(得分:1)
- 这将从 BlockNode
调用方法INode root = parser.parse(); // Let's assume it return new BlockNode();
builder = new StringBuilder();
builder.append("PARSE TREE:\n");
root.buildString(builder, 0);
- 这将从 SomeNode
调用方法INode root = parser.parse(); // Let's assume it return new SomeNode();
builder = new StringBuilder();
builder.append("PARSE TREE:\n");
root.buildString(builder, 0);
答案 1 :(得分:0)
我们假设我们有一个Parser类。
public Parser {
public INode parse(){
return new BlockNode(); // this will return a new BlockNode.
}
}
现在,如果你想确定在没有看到解析方法的情况下返回给你的类型。您可以在以下位置更改INode中的方法:
void buildString(StringBuilder builder, int tabs);
为:
String buildString(StringBuilder builder, int tabs);
然后在类节点上实现它时:
public class BlockNode implements INode {
public String buildString(StringBuilder builder, int tabs) {
return "BlockNode";
}
}
or
public class OtherNode implements INode {
public String buildString(StringBuilder builder, int tabs) {
return "OtherNode";
}
}
现在,通过这种方式,您可以通过打印来区分返回的类型。
root = parser.parse();
builder = new StringBuilder();
builder.append("PARSE TREE:\n");
String nameOfClass = root.buildString(builder, 0);
System.out.println(nameOfClass); // this will identify what type is returned.