当前位置: 首页 > 知识库问答 >
问题:

填充了许多子类的类取决于字段值

林绪
2023-03-14

我的数据结构有问题。

public class Disposition{
    private long Id;

    private DispositonType dispositonType;

    private DispositionDetailsA dispositionA;
    private DispositionDetailsB dispositionB;
...
}

数据库“disposition”中有一个表,有许多表“disposition\u details\u*”

我已经导出到另一个数据结构,我需要将这些数据转换到这个新的数据结构。有些字段对于disposition\u details\u*是通用的,有些字段对于一种dispositionType是唯一的

现在我对disposition_details_*中常见的每个字段都有很大的开关案例,但是它开始有问题,我想重构它,但是我不知道我能做什么?

我想创建接口,但我不确定它是否能正常工作,因为字段可以有不同的名称,即使它具有相同的信息。我无法将常见信息与另一个选项卡分离,因为它正在生产中。。。

你能给我提个解决办法吗。提前谢谢你。

致意,帕特里克

//编辑

public class Disposition {
    private long Id;

    private DispositioType dispositionType;

    private DispositionDetailsA dispositionDetailsA;
    private DispositionDetailsB dispositionDetailsB;
    private DispositionDetailsC dispositionDetailsC;
    private DispositionDetailsD dispositionDetailsD;

    
}


public class DispositionDetailsA {
    private long Id;
    private Dispositon disposition;
    private String localBankAccount;
    private boolean isForeignBankAccount;
    private String foreignBankAccount;
    private String foreignBankSwift;

    private String departmentName;
}



public class DispositionDetailsB {
    private long Id;
    private Dispositon disposition;
    private String localBankAccount;
    private boolean isForeignBankAccount;
    private String foreignBankAccount;
    private String foreignBankSwift;

    private String customerName;
    private String documentNumber;
}



public class DispositionDetailsC {
    private long Id;
    private Dispositon disposition;
    private String localBankAccount;
    private boolean isForeignBankAccount;
    private String foreignBankAccount;
    private String foreignBankSwift;

    private boolean isExportable;

    private String documentNumber;
    private String documentTitle;
}

public class DispositionDetailsC {
    private long Id;
    private Dispositon disposition;

    private String departmentName;
    private String customerName;
    private String documentDescription;
}


@Getter
@Setter
public class ExportDataStructure{

    private long Id;
    private String localBankAccount;
    private boolean isForeignBankAccount;
    private String foreignBankAccount;
    private String foreignBankSwift;
    private String departmentName;
    private String customerName;
    private String documentNumber;
    private String documentTitle;
    private String documentDescription;
}

public class Exporter{

    public ExportDataStructure exportDisposition(Disposition disposition){
        ExportDataStructure export = new ExportDataStructure();
        export.setId(disposition.getId());
        export.setLocalBankAccount(this.exportLocalBankAccount(disposition));
        ...
    } 

    private String exportLocalBankAccount(Disposition disposition){
        switch(disposition.getDispositionType()){
            case DispositionA:
                return disposition.getDispostionDetailsA().getLocalBankAccount();
            case DispositionB:
                return disposition.getDispostionDetailsB().getLocalBankAccount();
            case DispositionC:
                if(disposition.getDispositionC().isExportable()){
                    return disposition.getDispostionDetailsC().getLocalBankAccount();
                }
                else return null;
            case DispositionD:
                return null;
            default:
                return null;
        }
    }

}

共有1个答案

淳于博
2023-03-14

使用处理必要逻辑的接口。

public interface DispositionInterface {
    String getExportableBankAccount()
}

class DispositionDetailsA implements DispositionInterface {

     @Override
     public String getExportableBankAccount() {
         return localBankAccount;
     }

}

class DispositionDetailsB implements DispositionInterface {

     @Override
     public String getExportableBankAccount() {
         return isExportable ? localBankAccount : null;
     }
}

 类似资料:
  • 这里有一个关于我要做的事情的参考...访问JavaFX TableView ObservableRayList中的子类属性 但是仅仅使用示例代码,我基本上重写了2个方法,每个3次...在实际的程序中还有更多的东西。(再多一点点)

  • 问题内容: 我有要查询的模型(称为“活动”)(使用Mongoose)。他们的架构如下所示: 当我询问他们,我填充,,,和字段(所有引用)。在那之后,我也深入了这个领域。这是我的查询代码: 这已经是一个相对复杂的查询,但是我需要做更多。如果它碰到了声明的一部分,我 还 需要确保的字段等于字符串。我尝试使用,但是由于必须先填充事件,因此无法查询其任何字段。我还需要在其他多个查询中实现相同的目标。 如我

  • 问题内容: 我所做的: 我有一个模块 然后我有另一个课 我得到的是: 该作品不错,但字段为空。如果您编辑个人资料,则可以使用来向字段添加条目,但是我需要自动填写。 我的期望: 我希望打开个人资料时,每个设置为的记录都将在字段中可见。当我创建记录并将值设置为可以说时,该记录必须在字段中的配置文件中可见。如何实现呢? 问题答案: user_rel_ids =字段.many2many(comodel_n

  • 我正在使用pdfbox-1.8.12从PDF中读取内容以获取XFA。我已经能够成功地为大多数文件获取XFA,而没有遗漏任何字段值。 问题在于一些文件,如错误。pdf。我有许多字段没有像CIN这样的值,但当我在任何PDF查看器、foxit或Acrobat中打开文件时,它会显示该字段。 然后将字节[]转换为字符串。 这是此文件的xfa,如果您在此搜索“U72300DL1996PLC075672”,它将

  • 我试图用getter方法而不是字段来强制hibernate使用setter,但没有成功 我试图在字段上使用,但不起作用 如何强制hibernate调用setter方法填充类字段?

  • 问题内容: 我已经看到这个问题在互联网上流传,但是我还没有找到可行的解决方案。基本上,我想加载我的应用程序并按下一个按钮;然后,该按钮操作将在已加载到Web视图中的网站中填写用户名和密码(或等待onPageFinished)。最后,登录页面上的提交按钮将被激活。 据我了解,这可以通过使用loadUrl(javascript)进行Java注入来完成,但是我不知道用Java命令填写字段是什么。对于iO