写代码的时候,遇到了好多Null的判断,突然想到了Null Object的模式,用了之后,确实发现少掉了好多的Null判断
下面是写完的类
private class SubfacDBTreeModel extends BDVoFcTreeModel {
public SubfacDBTreeModel(TreeNode root,Vector vos) {
super(root,vos);
}
public String getChildCode(int i) {
SubfacVO facVO = getSubFac(i);
return facVO.getPrimaryKey();
}
public String getFatherCode(int i) {
SubfacVO facVO=getSubFac(i);
String pk_father = facVO.getParentsubfac();
if(pk_father!=null && pk_father.trim().length()==0) {
pk_father=null;
}
return pk_father;
}
public String getNodeCode(int i) {
SubfacVO facVO=getSubFac(i);
下面是写完的类
private class SubfacDBTreeModel extends BDVoFcTreeModel {
public SubfacDBTreeModel(TreeNode root,Vector vos) {
super(root,vos);
}
public String getChildCode(int i) {
SubfacVO facVO = getSubFac(i);
return facVO.getPrimaryKey();
}
public String getFatherCode(int i) {
SubfacVO facVO=getSubFac(i);
String pk_father = facVO.getParentsubfac();
if(pk_father!=null && pk_father.trim().length()==0) {
pk_father=null;
}
return pk_father;
}
public String getNodeCode(int i) {
SubfacVO facVO=getSubFac(i);
return facVO.getCsubfaccode();
}
public String getNodeName(int i) {
SubfacVO facVO=getSubFac(i);
return facVO.getCsubfacname();
}
private SubfacVO getSubFac(int i) {
if (m_vecVOs == null || m_vecVOs.size() <= 0
|| i >= m_vecVOs.size() ) {
return new NullSubfacVO();
}
return (SubfacVO) m_vecVOs.elementAt(i);
}
/**
* Null 模式,减少判断
*/
private class NullSubfacVO extends SubfacVO {
public String getPrimaryKey() {
return null;
}
public String getParentsubfac() {
return null;
}
public String getCsubfaccode() {
return null;
}
public String getCsubfacname() {
return null;
}
}
}
}
public String getNodeName(int i) {
SubfacVO facVO=getSubFac(i);
return facVO.getCsubfacname();
}
private SubfacVO getSubFac(int i) {
if (m_vecVOs == null || m_vecVOs.size() <= 0
|| i >= m_vecVOs.size() ) {
return new NullSubfacVO();
}
return (SubfacVO) m_vecVOs.elementAt(i);
}
/**
* Null 模式,减少判断
*/
private class NullSubfacVO extends SubfacVO {
public String getPrimaryKey() {
return null;
}
public String getParentsubfac() {
return null;
}
public String getCsubfaccode() {
return null;
}
public String getCsubfacname() {
return null;
}
}
}
如果不用null Object的话,要在getNodeName,getNodeCode,getChildCode,getFatherCode中加上
if (facVO == null ) {
return null;
}
的判断语句。
if (facVO == null ) {
return null;
}
的判断语句。
现在有个问题是我如果不新建一个Null Object的子类,而是用SubfacVO 类的默认行为来代替,是不是一样可行,因为这几个Get方法,本身如果没有调用过set的话,他一定会返回一个null的。
转过来一想,觉得如果用SubfacVO 的默认行为的话,是不是会造成很多迷惑,后来看代码的人感觉很蹊跷,虽然刷了一点小聪明,少写了好多。但是如果遇上式样变更,后期维护什么的,可能就会造成一些不必要的麻烦。看来某些聪明还是不要乱用的好:)