首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何构建3个只有一个差异的类

如何构建3个只有一个差异的类
EN

Stack Overflow用户
提问于 2016-05-07 01:07:59
回答 4查看 92关注 0票数 2

我有3个类需要用Java编写。为了便于讨论,它们被称为Task1、Task2和Task3。

这三个任务完全相同,只是它们是不同的“类型”任务。因此,Task1的字段类型将是"Task1“,依此类推。

最初我写了三个类,只有一个不同之处。但我认为最好是写一个基类Task,然后在三个子类中扩展这个类。我显然是个Java新手。

然而,我想不出该怎么做。

我的基调用如下所示:

代码语言:javascript
复制
package com.scoular.model;

public class TaskBase implements Serializable {

    private static final long serialVersionUID = -5867831497684227875L;

    private String unid;
    private String type;
    private Number order;

    public TaskBase() {
    }

    public void create() {
        try {
            clear();
            newNote = true;
            Session session = Factory.getSession();
            Date date = new Date();
            crtDte = session.createDateTime(date);
            crtUsr = session.getEffectiveUserName();
        } catch (Exception e) {
            XspOpenLogUtil.logError(e);
        }
    }

    public void loadByUnid(String unid) {
...
    }

    public void loadValues(Document doc) {
...
    }

    private void clear() {
...
    }

    public boolean save() {

        boolean tmpSave = true;

            Document doc = null;
            Session session = Factory.getSession();
            Database PCDataDB = session.getDatabase(PCConfig.getpcDataDBpath());

            if (newNote) {
                doc = PCDataDB.createDocument();
                doc.put("order", this.getNextOrder(doc));
            } else {
                doc = PCDataDB.getDocumentByUNID(unid);
            }
            doc.put("title", title);
            doc.put("notes", notes);

            doc.save();

        return tmpSave;
    }

    // Getters and Setters for common fields

    public String getUnid() {
        return unid;
    }

    public void setUnid(String unid) {
        this.unid = unid;
    }

    public String getType(String type) {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public Number getOrder() {
        return order;
    }

    public void setOrder(Number order) {
        this.order = order;
    }

}

我的超类看起来像这样:

代码语言:javascript
复制
package com.scoular.model;

import com.scoular.model.TaskBase;

public class Task extends TaskBase implements Serializable {

    private static final long serialVersionUID = -5867831497684227875L;

    // Custom Fields

    public Task() {

        super();
        this.setType("Build");
    }

}

我删掉了一些无关的代码。本质上,我想我需要一个抽象类,因为我永远不会实例化一个TaskBase。我知道我也可以通过实现来做到这一点,但我不是很好地理解这一点。

任何帮助都将不胜感激。

EN

回答 4

Stack Overflow用户

发布于 2016-05-07 01:15:43

可以从子类访问protected字段。因此,您可以将type字段设置为“`protected”,并在子类中分配所需的值。

TaskBase类:

代码语言:javascript
复制
`public abstract class TaskBase implements Serializable {

    private static final long serialVersionUID = -5867831497684227875L;

    private String unid;
    protected String type;
    private Number order;

任务类:

代码语言:javascript
复制
public class Task extends TaskBase implements Serializable {

    private static final long serialVersionUID = -5867831497684227875L;

    // Custom Fields

    public Task() {

        super();
        type = "build";
    }

}
票数 1
EN

Stack Overflow用户

发布于 2016-05-07 01:15:50

在这种情况下,Java Generics可能会有所帮助。

代码语言:javascript
复制
class Task<T> {
    private T t;
    T getTask() { return t; }
    void setTask(T _t) { this.t = _t; }
}

Task<Task1> task1 = new Task<Task1>();
task1.setTask(sometask);
票数 1
EN

Stack Overflow用户

发布于 2016-05-07 01:17:55

Java只允许从超类继承。“实现接口”是一个你应该学习的非常强大的工具。请观看Derek Banas Java教程15和16 (每个教程不到10分钟),并尝试使用实现。如果这些教程不能回答问题,请寻求更多帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37077922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档