这段代码不是我的,我需要对其进行一些改进,但是我陷入了这个问题。

我有一个抽象类“ 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类中向上移动,因为我认为它应该是唯一的并由所有子类共享。

07-24 18:59