Java:偶尔会使用对象作为类成员吗?

时间:2018-01-30 19:56:31

标签: java class oop

我有一个课程CodeText,如下所示:

public class CodeText{
    private char type;
    private int textCode;
    //Other members
}

有时,如果Symbol对象引用CodeText对象时出错,我需要"记录"那个Symbol以便CodeText"知道"谁在错误发生时提到它。

目前我添加了另一名成员" relatedSymbol"像下面的课程CodeText,但感觉就像一个丑陋的设计。

public class CodeText{
    private char type;
    private int textCode;
    private Symbol relatedSymbol;
    //Other members
}

我不确定上述内容是否可以改进。任何建议都表示赞赏。

编辑:很抱歉,我没有提供足够的背景信息。 我的目标如下: 对于课程CodeTexttextCode值会根据类型进行调整。 例如。如果类型是' I'(意味着立即),则textCode不变; 如果类型为' E'(表示外部),则应重新计算textCode,然后引用外部Symbol的地址。

但偶尔,textCode的价值可能是错误的。例如,如果类型是" E"但textCode点的价值 对于非法Symbol,应记录此错误,并且CodeText对象应该"知道"它试图引用Symbol

2 个答案:

答案 0 :(得分:0)

  

有时,如果Symbol对象引用a时出错   CodeText对象,我需要“记录”那个Symbol以便CodeText   “知道”错误发生时是谁引用它。

如果您的目标是记录/跟踪错误,那么将导致Symbol的错误混合到现有的CodeText类中并不是一个好主意,这将违反单一责任原则(look {{ 3}}),所以你可能还需要一个类ErrorRecorder,如下所示,它的唯一责任是记录错误。

public class ErrorRecorder {

    private final CodeText codeText;

    private final Symbol relatedSymbol;

    private final LocalDateTime errorCreatedDateTime;

    public ErrorRecorder(CodeText codeText, Symbol relatedSymbol,
                     LocalDateTime errorCreatedDateTime) {
        super();
        //Add some validations to the fields
        this.codeText = codeText;
        this.relatedSymbol = relatedSymbol;
        this.errorCreatedDateTime = errorCreatedDateTime;
    }

    //Add getters
}

答案 1 :(得分:0)

如果您希望它们分开,您可能还有另一个记录此类错误的对象

public class ReferenceError {
    private CodeText codeText;
    private Symbol symbol;
    //Other members
}

或者如果您真的不需要录制任何其他内容,只需使用Pair<CodeText, Symbol>

然后你可以将它们保存在列表中 List<ReferenceError>List<Pair<CodeText, Symbol>>

如果您需要为同一个CodeText记录多个错误

,甚至是Map<CodeText, Symbol[]>