【问题标题】:How can a type have multiple supertypes which are array types, and not itself be an array type?一个类型怎么能有多个超类型,它们是数组类型,而不是本身是数组类型?
【发布时间】:2014-12-13 22:55:53
【问题描述】:

我正在尝试使用https://docs.oracle.com/javase/specs/jls/se8/html/jls-18.html#jls-18.2.3https://docs.oracle.com/javase/specs/jls/se8/html/jls-18.html#jls-18.2.3Java 规范中概述的算法编写类型推断的实现

这里有一句我很难理解的含义:

"...在数组类型的 S 的超类型中,标识了一个最具体的类型,S'[](这可能是 S 本身)。"

S 本身如何不是是最具体的数组类型?换句话说,一个类型怎么可能有数组类型的超类型,而不是数组类型(因此是最具体的类型)?

我在这里遗漏了什么明显的东西吗?

感谢任何人提供的任何见解...

【问题讨论】:

  • 您的标题不能准确代表您的实际问题。
  • 标题问题相当于描述。我在描述中几乎逐字重复标题问题in...
  • 你误解了你引用的段落。它没有说明 S 不是数组类型。它只是暗示 S 可能不是“最具体的”类型。
  • 但是如果S 一个数组类型,那么它直接表明它是它及其所有超类型中最具体的数组类型。它不能有一个比它更具体的超类型,从定义上讲,这实际上是不可能发生的......
  • 此外,问题已经解决。 S 可以是通配符类型,也可能是交集类型。

标签: java types specifications inference


【解决方案1】:

假设你有一个 Double[] 并且选项是 Number[] 或 Object[] 那么 Number[] 是最具体的匹配。执行类型推断时,可能存在多个约束。它甚至可以推断出类型 (Serializable[] & Comparable[])

【讨论】:

  • 是的,现在我已经提出了这个问题 - 还要感谢现在已删除的对该问题的评论 - 我已经意识到有很多方法可以让通配符类型具有上限关于数组类型,以及涉及数组类型的交集类型等......嗯,我会多考虑一下,然后可能只是将其标记为已接受。
  • 我删除了我的评论,因为我不这么认为? extends CharSequence[] 实际上是一种类型。我不完全确定它是什么。我已经尝试过很多次但都失败了,无法理解 java 泛型和类型,但它们完全无法理解。
  • 不,你完全正确,至少在问题的上下文中。在对此进行试验时,我刚刚在 Eclipse 的类型推断实现中也发现了一些错误,哈哈,这既让我对我的愚蠢问题感觉更好,也让我感到害怕。干杯。
  • 万一其他人需要这个问题的答案,虽然规范没有明确说明,但我认为该算法使得 S 不能是在这种情况下,通配符类型,虽然它可能是一个交集类型。通配符应该由包含约束处理,而不是由子类型约束遇到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-19
  • 2022-01-02
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
相关资源
最近更新 更多