重新定义OSWorkflow中的AbstractDescriptor抽象类

作者因OSWorkflow中XMLizable接口的writeXML方法设计不合理而感到困扰,该方法仅在控制台输出XML而非返回文件。通过修改AbstractDescriptor类,实现了getXML方法以替代原有的接口方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

只要看过OSWorkflow的抽象接口AbstractDescriptor方法的人,我相信你们的心情和我一样的糟糕!!而让我心情如此糟糕的原因就出在XMLizable这个接口上,我们来看看这个接口的定义

/*
 * Copyright (c) 2002-2003 by OpenSymphony
 * All rights reserved.
 */
package com.opensymphony.workflow.util;

import java.io.PrintWriter;
import java.io.Serializable;


/**
 * DOCUMENT ME!
 *
 * @author $author$
 * @version $Revision: 1.2 $
 */
public interface XMLizable extends Serializable {
    //~ Static fields/initializers /////////////////////////////////////////////

    public static final String INDENT = "  ";

    //~ Methods ////////////////////////////////////////////////////////////////

    public void writeXML(PrintWriter writer, int indent);
}


问题就出现在writeXML方法!这就等于是用户希望你把生成的xml文件给他,而你却说:给什么,从控制台COPY一份嘛,笨蛋!

动手修改了AbstractDescriptor方法的实现,而实现的方法很简单-屏蔽writeXML方法(在这里我发现抽象类实现某个接口的时候,不需要去实现接口的方法!),并为其提供getXML方法。

/*
 * Copyright (c) 2002-2003 by OpenSymphony
 * All rights reserved.
 */
package com.company.workflow.loader;

import com.opensymphony.workflow.util.XMLizable;

import java.io.PrintWriter;
import java.io.Serializable;


/**
 * AbstractDescripter
 * @author killvin@hotmail.com
 */
public abstract class AbstractDescriptor implements XMLizable,  Serializable {
    //~ Instance fields ////////////////////////////////////////////////////////

    private AbstractDescriptor parent;
    private boolean hasId = false;
    private int id;

    //~ Methods ////////////////////////////////////////////////////////////////

    public void setId(int id) {
        this.id = id;
        hasId = true;
    }

    public int getId() {
        return id;
    }

    public void setParent(AbstractDescriptor parent) {
        this.parent = parent;
    }

    public AbstractDescriptor getParent() {
        return parent;
    }

    public boolean hasId() {
        return hasId;
    }
   
    /**
     * @deprecated getXML();
     */
    public void writeXML(PrintWriter writer, int indent)
    {
     
    }
   
    /**
     * get xml descripter
     * @return
     */
    public abstract String getXML();
   
}

总结

1。接口的定义来源于对类方法级别的抽象,没有高层次的抽象能力就先不要抽象接口,免得害人。

2。抽象类实现了接口,并不需要你去实现接口声明的方法-JAVA语法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值