这段代码不是我的,我需要对其进行一些改进,但是我陷入了这个问题。
我有一个抽象类“ CallNode”和许多子类,其中一个是“ Call”。 “ Checker”类正在拦截未接来电,但会将其作为CallNode返回。我的问题是我需要获取此呼叫的ID,但是我无法通过CallNode访问它。
您对解决这个问题有什么建议吗?
我让你的代码,以便您可以更好地理解问题:
public abstract class CallNode {
public abstract CallNode hasMissingCall();
}
public class Call extends CallNode {
public int id;
// Simplification of method
public CallNode hasMissingCall() {
if (true)
return this;
// ...
}
}
public class Checker{
private static CallNode rootExpected;
CallNode missing = rootExpected.hasMissingCall();
System.out.println( missing.id ); // THE PROBLEM!!!
}
提前致谢!!!
最佳答案
在抽象类中定义一个返回id的模板方法:
public abstract class CallNode {
public abstract CallNode hasMissingCall();
public abstract int getId();
}
让子类实现它:
public class Call extends CallNode {
public int id;
// Simplification of method
public CallNode hasMissingCall() {
if (true)
return this;
// ...
}
public int getId()
{
return this.id;
}
}
这是一个选择。就个人而言,我将把ID字段在CallNode类中向上移动,因为我认为它应该是唯一的并由所有子类共享。