在组成关系中查找特定的呼叫者

时间:2018-08-21 22:13:49

标签: java debugging composition

class MyDate{
    Calendar effectiveDate, cancelDate;
    //Getter and setter
}

class Member{
    private String fName, lName
    private MyDate date;
    //getter setters
}

class Policy{
    private int policyId
    private MyDate date;
    //getter setters
}

class Address{
    private int addressType
    private MyDate date;
    //getter setters
}

我还有更多类,例如合同,付款,地址等,它们都引用了日期类

然后我有多个服务调用setEffectiveDate()

Service1{
    member.getDate().setEffectiveDate(effDate);
}

Service2{
    policy.getDate().setEffectiveDate(effDate);
}

Service3{
    contract.getDate().setEffectiveDate(effDate);
    address.getDate().setEffectiveDate(addressEffDate);
}

我想在setEffectiveDate()中设置调试指针,以便仅在调用setEffectiveDate()(例如地址对象)时才会挂起执行。

我尝试使用Thread.currentThread()。getStackTrace(),但它为我提供了调用服务类的名称(在这种情况下为Service3),但没有提供调用该方法的实际父对象(地址)。 注意:使用Java 7,RSA / Eclipse

现在我正在使用一种非常麻烦的方法,如下所示

class MyDate{
    Calendar effectiveDate, cancelDate;
    //Getter and setter
    public String source; //This is temporary variable I introduce just for debugging purpose
    public setEffectiveDate(Calendar effectiveDate){
        this.effectiveDate = effectiveDate;
        /* This is temporary code for debugging */
        if(this.source.equals("address"){
            System.out.println("Called from address"); //Set a debug pointer on this line
        }
    }
}

然后在地址类中,我将source设置为“ address”

class Address{
    private int addressType
    private MyDate date;
    public getDate(){
        this.date.source = "address"; //Temporary code just for debugging
        return date;
    }
}

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

首先,不建议使用Date名称,因为任何开发人员都会认为它是标准Java Date类,而不是您的自定义类。我建议您考虑重命名。
第二,您可以添加条件到断点。在Eclipse中,您勾选了条件复选框,然后可以添加将返回布尔值的内容,例如this.source.equals(“ address”),并且只有在满足该条件时它才会停止。