为什么没有“? JPA API Path.get(MapAttribute)和Path.get(PluralAttribute)参数中的“超级X”?

问题描述 投票:1回答:1

这是关于JPA API for Path的设计问题。

(我不是试图解决问题或寻找解决方法,只是问一个关于为什么API是以某种方式设计的问题。)

API有以下方法:

  1. <Y> Path<Y> Path.get(SingularAttribute<? super X, Y> attribute)
  2. <E, C extends Collection<E>> Expression<C> Path.get(PluralAttribute<X, C, E> attribute)
  3. <K, V, M extends Map<K,V>> Expression<M> Path.get(MapAttribute<X, K, V> attribute)

我的问题是方法#1如何接受泛型类型<? super X, ...>的属性,但方法#2和#3只接受泛型类型<X, ...>的属性?

似乎同样的推理应该适用于所有三种情况:即,属性可以源自(即,对应于在类X中声明的属性)或任何超类X

然而在#2和#3中,该属性仅允许来自类X

这是JPA规范中的设计疏忽,还是存在一些我没有看到差异的潜在原因?

java jpa jpa-2.0
1个回答
0
投票

回答我自己的问题。这是一个规范错误。

感谢@ DN1指出spec issue中的comment

© www.soinside.com 2019 - 2024. All rights reserved.