【发布时间】:2018-03-04 16:41:40
【问题描述】:
这是一个关于JPA API for Path的设计问题。
(我不是试图解决问题或寻找解决方法,只是询问有关 API 为何以某种方式设计的问题。)
API 有以下方法:
<Y> Path<Y> Path.get(SingularAttribute<? super X, Y> attribute)<E, C extends Collection<E>> Expression<C> Path.get(PluralAttribute<X, C, E> attribute)<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 规范中的设计疏忽,还是有一些我没有看到的差异的根本原因?
【问题讨论】:
-
我想知道为什么它是
? super X在单数属性的情况下。 -
因为 API 不正确,而 JPA“专家组”尽管被告知 github.com/javaee/jpa-spec/issues/108,但并没有费心纠正它