我有2个实体类,彼此有点不同,但大部分都相似,
我有2个使用它们的函数。
StudentDataPassData都具有getDatatype()getPassIndLinkId()之类的方法。

如何避免两次编写类似的代码?

private StudentData getStudentDataEqual(PassIndLinkReq passIndLinkReq, List<StudentData> dataList, Long val){
    for (StudentData data:dataList) {
       if (data.getPassIndLinkId().intValue()==passIndLinkReq.getId().intValue()){
            switch (passIndLinkReq.getDatatype().intValue()) {
              case 0:
              case 1:
                 return data;
              case 7:
                 if (data.getClassItemTreeId().equals(val)){
                     return data;
                 }
                 break;
              ...
            }
        }
    }
    return new StudentData();
}
// and this
private PassData getStudentDataEqual(PassIndLinkReq passIndLinkReq, List<PassData> dataList, Long val){
    for (PassData data:dataList){
       if (data.getPassIndLinkId().intValue()==passIndLinkReq.getId().intValue()) {
           switch (passIndLinkReq.getDatatype().intValue()) {
             case 0:
             case 1:
               return data;
             case 7:
               if (data.getClassItemTreeId().equals(val)){
                   return data;
               }
               break;
             ...
           }
        }
    }
    return new PassData();
}

最佳答案

您可以使用一个新的超类(而不是接口,因为要返回一个新实例),这两个类都可以继承:

public class Data { ... }

public class StudentData extends Data { ... }

public class PassData extends Data { ... }


这不是最干净的变体,但应该可以正常工作。

private Data getStudentDataEqual(PassIndLinkReq passIndLinkReq, List<Data> dataList, Long val){
    for (T data:dataList){
        if (data.getPassIndLinkId().intValue()==passIndLinkReq.getId().intValue()) {
            switch (passIndLinkReq.getDatatype().intValue()) {
                case 0:
                case 1:
                    return data;
                case 7:
                    if (data.getClassItemTreeId().equals(val)){
                        return data;
                    }
                    break;
                ...
                }
            }
        }
    return new Data();
}


但是,使用此解决方案,您将需要随后强制转换返回值。

关于java - Java函数用于2个不同的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42363043/

10-14 10:45