gpt4 book ai didi

java - 比较器抛出奇怪的 ClassCastException : pkg. MyClass cannot be cast to pkg.MyClass

转载 作者:行者123 更新时间:2023-11-29 08:12:13 33 4
gpt4 key购买 nike

我正在使用 ComparatorList<Entity> 进行排序通过它的属性(类型为 Date )在 viewscoped 托管 bean 中。

问题是我一直收到 ClassCastException如下-

java.lang.ClassCastException: pkg.db.BaseArStatus cannot be cast to pkg.db.BaseArStatus.

为什么不能投BaseArStatusBaseArStatus ?是不是因为BaseArStatus是一个 Entity

这个问题对我来说真的很奇怪,因为我不是每次都得到异常。大多数它在构建和部署应用程序时工作正常(运行没有任何问题)但有时(即使我正在做同样的事情 - 构建和部署)它在运行时失败并显示 ClassCastException .

为什么这种情况只是有时发生而不是一直发生?是因为我在托管 bean 中使用它吗?

这就是托管 bean 的样子 -

@ManagedBean
@ViewScoped
public class MyBean {

@PersistenceContext(unitName = "myPU")
private EntityManager em;

public void myMethod() {
List<BaseArStatus> basList = this.fetchAllBaseArStatus();
Collections.sort(basList, new Comparator<BaseArStatus>() {
@Override
public int compare(BaseArStatus o1, BaseArStatus o2) {
return o1.getMonthDate().compareTo(o2.getMonthDate());
}
});
//...

和实体BaseArStatus -

@Entity
@Table(name = "base_ar_status")
@NamedQueries({
@NamedQuery(name = "BaseArStatus.findAll", query = "SELECT b FROM BaseArStatus b")})
public class BaseArStatus implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@NotNull
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@NotNull
@Column(name = "month_date")
@Temporal(TemporalType.DATE)
private Date monthDate;
@Basic(optional = false)
@NotNull
@Column(name = "ar_count")
private double arCount;
@Size(max = 50)
@Column(name = "user_id")
private String userId;
@Column(name = "last_update_date")
@Temporal(TemporalType.TIMESTAMP)
private Date lastUpdateDate;

public BaseArStatus() { }
//...

最佳答案

两个不同的类加载器正在加载该类的两个不同副本。当“熟悉”类的一个副本的客户端代码获得一个对象,该对象是该类的另一个副本的实例时,这就是您得到的。

只有当该类已被两个 类加载器加载时才会出现此问题。这会使它看起来断断续续;根据您通常无法控制的事件,其中一个类加载器可能已加载该类,也可能未加载该类。根据我的经验,这是 Java EE 编程中最常见的问题,当然,这就是您正在做的事情。

关于java - 比较器抛出奇怪的 ClassCastException : pkg. MyClass cannot be cast to pkg.MyClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7533625/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com