异常:无法转换为java.lang.Long

异常:无法转换为java.lang.Long,java,Java,我遇到了一个异常,我不知道如何修复 Caused by: java.lang.ClassCastException: com.xitee.ccpt.entity.ProjectRoleSkill cannot be cast to java.lang.Long 在com.xitee.ccpt.ui.project.ProjectRoleSkillGrid$3.buttonClick(ProjectRoleSkillGrid.java:222)~[classes/:na] public void

我遇到了一个异常,我不知道如何修复

Caused by: java.lang.ClassCastException: com.xitee.ccpt.entity.ProjectRoleSkill cannot be cast to java.lang.Long
在com.xitee.ccpt.ui.project.ProjectRoleSkillGrid$3.buttonClick(ProjectRoleSkillGrid.java:222)~[classes/:na]

public void buttonClick(ClickEvent event) {
    Long projectRoleSkillId = (Long) getValues().iterator().next();
    ProjectRoleSkillAddWindow projectRoleAddWindow = new ProjectRoleSkillAddWindow("Add Project Role Skill",
    new DialogWindowListener<ProjectRoleSkill>() {
        @Override
        public void dialogConfirmed(ProjectRoleSkill projectRoleSkillUpdated) {
            projectRoleSkillUpdated.setProjectRole(projectRole);
            projectRoleSkillUpdated.setProjectRoleSkillId(projectRoleSkillId);
            projectRoleSkillService.save(projectRoleSkillUpdated);
            refreshContent();
        }

        @Override
        public void dialogClosed(boolean confirmed) { }
    });
    rojectRoleAddWindow.loadToEdit(projectRoleSkillService.findProjectRoleSkillByIdForEditWindow(projectRoleSkillId));
    CcptUI.getCurrent().addWindow(projectRoleAddWindow);
}
public void按钮单击(单击事件){
Long projectRoleSkillId=(Long)getValues().iterator().next();
ProjectRoleSkillAddWindow projectRoleAddWindow=新建ProjectRoleSkillAddWindow(“添加项目角色技能”,
新建对话框WindowListener(){
@凌驾
公共作废对话框已确认(ProjectRoleSkill ProjectRoleSkill更新){
projectRoleSkillUpdated.setProjectRole(projectRole);
projectRoleSkillUpdated.setProjectRoleSkillId(projectRoleSkillId);
projectRoleSkillService.save(projectRoleSkillUpdated);
刷新内容();
}
@凌驾
公共无效对话框已关闭(布尔值已确认){}
});
RojectRoleAddWidow.loadToEdit(projectRoleSkillService.FindProjectRoleSkillByIDForeEdit窗口(projectRoleSkillId));
CcptUI.getCurrent().addWindow(projectRoleAddWindow);
}
这不是一个漫长的过程。我假设
getValues()
返回类型为
ProjectRoleSkill
的iterable

为了避免这种情况,而不是

public Set<Object> getValues() {
    return new HashSet<Object>(grid.getSelectedRows());
}
public Set getValues(){
返回新的哈希集(grid.getSelectedRows());
}
您应该将方法签名重写为

public Set<ProjectRoleSkill> getValues() {
    return new HashSet<>(grid.getSelectedRows());
}
public Set getValues(){
返回新的哈希集(grid.getSelectedRows());
}

这样,IDE就不会让您进行长时间的强制转换。然后,您还可以看到我假设的
ProjectRoleSkill
类上的
getId()
方法。

您正在尝试将
ProjectRoleSkill
转换为
Long
。此外,返回的ProjectRoleSkill对象可能有一个内部ID,该ID为Long,可以通过调用getId()获得在上面,OP忘了写。大概是这样。@BenR你能给我更多的细节吗?@IliaTapia我不确定我能给多少细节,这在Java中是一个相当基本的概念。我是Java的初级,所以我不知道你的意思事实上>所以你说将方法签名重写为公共集getValues(){odher部分呢,是的,我有一个getProjectRoleSkillId,但老实说,我不理解你的想法@BenR。如果你使用的是Java 1.6或更高版本,你可以用
替换return语句中的
。程序的其余部分需要知道
getValues()
不仅返回
对象
s,还返回
ProjectRollSkill
s。否则,程序的其余部分无法调用
getProjectRoleSkillId
public Set<ProjectRoleSkill> getValues() {
    return new HashSet<>(grid.getSelectedRows());
}