如何在java数组中将类型更改为扩展对象?

Zer*_*ind 2 java java-8

我有3个班:

class Class1 {}
class Class2 extends Class1 {}
class Class3 extends Class1 {}
Run Code Online (Sandbox Code Playgroud)

我试图改变包含Class1这样的数组的类型:

Class1[] arr = ...  // [Class2, Class2, Class3, Class3]
arr = Arrays.copyOf(arr,2)
Class2[] arr2 = (Class2[]) arr
Run Code Online (Sandbox Code Playgroud)

这似乎是不可能的,但我能做到

Class2[] arr2 = new Class2[arr.length]
for ...
    arr2[i] = (Class2) arr[i]
Run Code Online (Sandbox Code Playgroud)

有没有办法在没有迭代的情况下做到这一点?

我们可以假设arr(之后copyOf)中的所有元素都可以输入Class2.

我得到的错误是:

CassCastException:[LStuff.Class1; 无法转换为[LStuff.Class2;

Ous*_* D. 5

考虑到你想要改变所有对象的类型并尽可能将它放到另一个数组中; 你可以filter一起使用map.即:

Class2[] result = Arrays.stream(arr).filter(e -> e instanceof Class2)
                        .map(e -> (Class2)e).toArray(Class2[]::new);
Run Code Online (Sandbox Code Playgroud)