小编bra*_*eep的帖子

如何在特定情况下Java不是类型安全的?

今天我发现了一个非常奇怪的JVM 行为,一个(通常是类型安全的)List<Date>确实List<MyObject>在运行时保持了!

我想知道怎么会发生,但在网络上找不到任何东西.

情况就是这样:我正在和Spring Data JPA 1.2.0一个人JBoss EAP 6.0 Server一起工作JRE 1.6.0_18-b07.

错误地,在Spring Data JPA Repository类中,@Query表达式中写入了错误的结果类型.应该是:

  @Query("select distinct trunc(record.orderDateTime) from MyType record [...]" )
  public List<Date> getOrderDates(...);
Run Code Online (Sandbox Code Playgroud)

但是:

  @Query("select record from MyType record [...]" )
  public List<Date> getOrderDates(...);
Run Code Online (Sandbox Code Playgroud)

因此,目的是加载一个日期(java.util.Date)列表,如果在第一个代码片段中正确定义了查询,该列表工作正常.

但是编码错误导致了以下结果:在运行时,实际上List<MyType>返回了WAS ,即使方法的签名定义了一个List<Date>.同样在我的模型List<Date>中,a/的属性包含a List<MyType>.我调试了它,无法相信我的眼睛!我甚至可以写这个列表的JSP的内容(我只认识到了这个怪异的行为,因为JSP不能显示任何更由于春季表达式语言错误与试图从类型匹配存在的MyTypeDate,这当然有坠毁).

天哪,我现在应该放弃对Java类型安全性的信任吗?

有没有人遇到过这样的问题?

是否存在对此的解释?

我可以做任何事情来解决这个问题,还是一般问题?也许是另一个版本的JRE,JBOSS,......?

java java-ee spring-data-jpa

8
推荐指数
2
解决办法
705
查看次数

标签 统计

java ×1

java-ee ×1

spring-data-jpa ×1