Thursday, July 01, 2004

Java; Using Flag Classes to Replace boolean values.

Let me supply some background information before talking about the Flag classes. Part of my project involves using Java classes to access XML. I don't want to use the currently available unmarshalling tools because I only need part of the XML data inside my Java application. Therefore, I use XPATHs to select the data as needed. In order to ensure that I can use the same class to selectively unmarshall from XML and provide the ability to run test cases, I use the following technique:

  private String senderName = null;

  public String getSenderName() {
    if (this.senderName == null) {
      this.senderName = XmlHelper.getTextAtXpath(getCurrentElement(), "./senderName");
    }
    return this.senderName;
  }

  public void setSenderName(final String _senderName) {
    this.senderName = _senderName;
  }

This technique works fine for strings because they are nullable. However, boolean values are harder to handle. So I create a Flag class:

public class MsgIsParent{

    private boolean value;

    public static final MsgIsParent TRUE = new MsgIsParent(true);
    public static final MsgIsParent FALSE = new MsgIsParent(false);

    private MsgIsParent(final boolean _value) {
        this.value = _value;
    }

    public static MsgIsParent factory(final boolean _value) {
        if (_value) {
            return TRUE;
        } else {
            return FALSE;
        }
    }
}

With this small helper available, I can follow the same technique that I used for Strings:

    private MsgIsParent msgIsParent = null;
    
    public MsgIsParent getMsgIsParent() {
        if (this.msgIsParent == null) {
            this.msgIsParent = MsgIsParent.factory(getRootElement().getNodeName().equals(getMessageType()));
        }
        return this.msgIsParent;
    }
    
    public void setMsgIsParent(final MsgIsParent _msgIsParent) {
        this.msgIsParent = _msgIsParent;
    }
Post a Comment