Class<?的Java语法扩展 T[]> [重复]

Posted

技术标签:

【中文标题】Class<?的Java语法扩展 T[]> [重复]【英文标题】:Java syntax of Class<? extends T[]> [duplicate] 【发布时间】: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

【问题讨论】:

【参考方案1】:

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

【讨论】:

谢谢!我再次对数组/列表子类型感到困惑

以上是关于Class<?的Java语法扩展 T[]> [重复]的主要内容,如果未能解决你的问题,请参考以下文章

java中返回值类型<T> T 这两个T分别代表啥?

class A<T>where T:new()是啥意思

如何在 Scala 中扩展包含泛型方法的 Java 接口?

java泛型T和class.getName一样吗?

java实现从服务端下载文件

在java中t.getClass为啥返回的是Class<gt;而不是Class<T>