實體類莫名其妙出現類型轉化異常,主要是子類類型轉換異常,自身轉自身、遍歷也報錯

問題背景描述:公司的老項目,突然出現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());
    }
}

最後驗證發現果然是這樣的

 

思路來源:https://bbs.csdn.net/topics/392261540

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章