【问题标题】:Why no "? super X" in JPA API Path.get(MapAttribute) and Path.get(PluralAttribute) parameter?为什么 JPA API Path.get(MapAttribute) 和 Path.get(PluralAttribute) 参数中没有“?super X”?
【发布时间】:2018-03-04 16:41:40
【问题描述】:

这是一个关于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 怎么会接受泛型类型&lt;? super X, ...&gt; 的属性,而方法#2 和#3 只接受泛型类型&lt;X, ...&gt; 的属性?

似乎相同的推理应该适用于所有三种情况:也就是说,属性可以源自(即,对应于在其中声明的属性)类XX 的任何超类。

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

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

【问题讨论】:

  • 我想知道为什么它是 ? super X 在单数属性的情况下。
  • 因为 API 不正确,而 JPA“专家组”尽管被告知 github.com/javaee/jpa-spec/issues/108,但并没有费心纠正它

标签: java jpa jpa-2.0


【解决方案1】:

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

感谢@DN1 指出comment 中的spec issue

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-26
    • 2023-03-05
    • 2013-04-02
    • 1970-01-01
    • 2020-01-16
    • 2018-11-05
    • 2013-11-05
    相关资源
    最近更新 更多