我有2个实体类,彼此有点不同,但大部分都相似,
我有2个使用它们的函数。StudentData
和PassData
都具有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/