検索

ホームページ  >  に質問  >  本文

泛型 - ArrayList中toArray()为什么不支持强制类型转换?[Java]

黄舟黄舟2766日前620

全員に返信(4)返信します

  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:44:06

    (T[]) Arrays.copyOf(elementData, size, a.getClass()); 配列自体の型が a.getClass() であるため、強制転送は成功します。 (T[]) Arrays.copyOf(elementData, size, a.getClass()); 强转可以成功是因为数组的类型本身就为a.getClass()

    public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
        @SuppressWarnings("unchecked")
        T[] copy = ((Object)newType == (Object)Object[].class)
            ? (T[]) new Object[newLength]
            : (T[]) Array.newInstance(newType.getComponentType(), newLength);
        System.arraycopy(original, 0, copy, 0,
                         Math.min(original.length, newLength));
        return copy;
    }

    通过Array.newInstance(newType.getComponentType(), newLength)创建的(目标类型)数组对象。


    String[] y = (String[]) x.toArray()无法强制转换是因为array的数据类型为Object[]而不是String[] リーリー

    Array.newInstance(newType.getComponentType(), newLength) によって作成された (ターゲット タイプの) Array オブジェクト。 🎜 <時間> 🎜String[] y = (String[]) x.toArray() は、array のデータ型が Object[] であるためキャストできません。 String[] の代わりに。 🎜

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:44:06

    StringObject 的子类,但是 String[] 不是 Object[] 的子类,所以对于实际类型是 StringObject 引用是可以强转成 String 的。但是 Object[] 怎么都不能强转成 String[],只能采用个个赋值的方式,把里面的引用挨个强转再拷贝过来(当然可以用 Arrays.copyOf() やってみましょう。

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:44:06

    サブクラスの値をサブクラスに変換して戻すことは合法です

    Object[] の値を String[] にキャストします。この動作は

    (Integer)(new Object()) に似ています

    返事
    0
  • 阿神

    阿神2017-04-18 10:44:06

    ArrayList のジェネリック型Eは、ジェネリック型が指定されていない場合には必要ありません。例:

    リーリー

    この場合、2番目の方法は適用できず、強制的な型変換を実行する方法はありません

    返事
    0
  • キャンセル返事