【问题标题】:Java syntax of Class<? extends T[]> [duplicate]Class<?的Java语法扩展 T[]> [重复]
【发布时间】:2020-03-12 19:59:43
【问题描述】:

以下代码来自Arrays类:

http://developer.classpath.org/doc/java/util/Arrays-source.html

  public static <T,U> T[] copyOfRange(U[] original, int from, int to,
                      Class<? extends T[]> newType)
  {
    if (from > to)
      throw new IllegalArgumentException("The initial index is after " +
                     "the final index.");
    T[] newArray = (T[]) Array.newInstance(newType.getComponentType(),
                       to - from);
    if (to > original.length)
      {
    System.arraycopy(original, from, newArray, 0,
             original.length - from);
    fill(newArray, original.length, newArray.length, null);
      }
    else
      System.arraycopy(original, from, newArray, 0, to - from);
    return newArray;
  }

我对@9​​87654324@ 部分感到困惑,如何扩展T[]?据我所知,没有像K[] 这样的数组是T[] 的子类型,尽管K extends T

【问题讨论】:

    标签: java generics


    【解决方案1】:

    这是因为与其他对象不同,java 中的数组是协变的。至于为什么数组有这个特殊属性,我不确定,但是这个问题已经在 SO here 上得到了回答。

    【讨论】:

    • 谢谢!我再次对数组/列表子类型感到困惑
    猜你喜欢
    • 2011-11-09
    • 2012-01-15
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    相关资源
    最近更新 更多