問題背景描述:公司的老項目,突然出現bug,以前運行好好的,代碼也長時間未更新了,報錯如下圖:
報錯的地方
然後改成相同子類遍歷,不用子類轉父類
還是報錯,不是這個問題,然後發現語法基本沒啥問題
然後對實體類進行分析,一直找不到問題
通過問題一步步排查,最後發現只要涉及到該實體類的類型轉換,就會報錯,不管是強轉,還是自身調用轉換都會出現報錯
實體類ProjectUserBean子類
public class ProjectUserBean extends ProjectBean implements Serializable {
private static final long serialVersionUID = 1L;
protected static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
private Integer userSignCount;
private Integer projectId;
private ProjectBean projectBean;
public Integer getProjectId() {
return projectId;
}
public void setProjectId(Integer projectId) {
this.projectId = projectId;
}
public Integer getUserSignCount() {
return userSignCount;
}
public void setUserSignCount(Integer userSignCount) {
this.userSignCount = userSignCount;
}
public ProjectBean getProjectBean() {
return projectBean;
}
public void setProjectBean(ProjectBean projectBean) {
this.projectBean = projectBean;
}
}
實體類ProjectBean 父類
public class ProjectBean implements Serializable {
private static final long serialVersionUID = 1L;
protected static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
private Integer projectId;
private String projectName;
private String createDime;
private String stage;
private String startDate;
private String endDate;
private Integer speed;
private Integer status;
private String projectManager;
private String managername;
private String dUserId;
// 總打卡人天
private Integer allSignCount;
public Integer getProjectId() {
return projectId;
}
public void setProjectId(Integer projectId) {
this.projectId = projectId;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public String getCreateDime() {
return createDime;
}
public void setCreateDime(String createDime) {
this.createDime = createDime;
}
public String getStage() {
return stage;
}
public void setStage(String stage) {
this.stage = stage;
}
public String getStartDate() {
return startDate;
}
public void setStartDate(String startDate) {
this.startDate = startDate;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
public Integer getSpeed() {
return speed;
}
public void setSpeed(Integer speed) {
this.speed = speed;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getProjectManager() {
return projectManager;
}
public void setProjectManager(String projectManager) {
this.projectManager = projectManager;
}
public String getdUserId() {
return dUserId;
}
public void setdUserId(String dUserId) {
this.dUserId = dUserId;
}
public String getManagername() {
return managername;
}
public void setManagername(String managername) {
this.managername = managername;
}
public Integer getAllSignCount() {
return allSignCount;
}
public void setAllSignCount(Integer allSignCount) {
this.allSignCount = allSignCount;
}
public static ProjectBean toBean(ProjectEntity peEntity) {
ProjectBean pb = new ProjectBean();
pb.setProjectId(peEntity.getId());
pb.setProjectName(peEntity.getProjectName());
pb.setStartDate(sdf.format(peEntity.getStartDate()));
pb.setEndDate(sdf.format(peEntity.getEndDate()));
pb.setStage(Constant.stages[peEntity.getStage()]);
pb.setSpeed(peEntity.getSpeed());
pb.setCreateDime(sdf.format(peEntity.getCreatetime()));
if(StringUtils.isNotEmpty(peEntity.getProjectManager())) {
RpcUserEntity rpcUser = RpcUserUtil.getRpcUserBean(peEntity.getProjectManager()).getRpcUser();
if(null != rpcUser) {
pb.setManagername(rpcUser.getNikename());
}
}
pb.setStatus(peEntity.getStatus());
pb.setProjectManager(peEntity.getProjectManager());
return pb;
}
}
個人覺得應該是實體類這裏有問題,應該是無法判斷類的類型所致,所以加上判斷,如下:
for (Object userpb : pbs) {
if (userpb instanceof ProjectUserBean) {
ProjectUserBean projectBean= (ProjectUserBean) userpb;
set.add(projectBean.getProjectId());
}
}
最後驗證發現果然是這樣的