我有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;
考虑到你想要改变所有对象的类型并尽可能将它放到另一个数组中; 你可以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)