Java 将一种类型的数组转换为子类型的数组

Java 将一种类型的数组转换为子类型的数组,java,oop,Java,Oop,我想将数组从一种类型转换为另一种类型。如下所示,我循环第一个数组中的所有对象,并将它们转换为第二个数组类型 但这是最好的方法吗?有没有一种方法不需要循环和铸造每个项目 public MySubtype[] convertType(MyObject[] myObjectArray){ MySubtype[] subtypeArray = new MySubtype[myObjectArray.length]; for(int x=0; x < myObjectArray.len

我想将数组从一种类型转换为另一种类型。如下所示,我循环第一个数组中的所有对象,并将它们转换为第二个数组类型

但这是最好的方法吗?有没有一种方法不需要循环和铸造每个项目

public MySubtype[] convertType(MyObject[] myObjectArray){
   MySubtype[] subtypeArray = new MySubtype[myObjectArray.length];

   for(int x=0; x < myObjectArray.length; x++){
      subtypeArray[x] = (MySubtype)myObjectArray[x];
   }

   return subtypeArray;
}
public MySubtype[]convertType(MyObject[]myObjectArray){
MySubtype[]subjectarray=新的MySubtype[myObjectArray.length];
对于(int x=0;x
您应该能够使用以下内容:

Arrays.copyOf(myObjectArray, myObjectArray.length, MySubtype[].class);
然而,这可能只是循环和铸造引擎盖下无论如何


请参阅。

如果可能的话,我建议使用
列表
而不是
数组。

以下是操作方法:

public class MainTest {

class Employee {
    private int id;
    public Employee(int id) {
        super();
        this.id = id;
    }
}

class TechEmployee extends Employee{

    public TechEmployee(int id) {
        super(id);
    }

}

public static void main(String[] args) {
    MainTest test = new MainTest();
    test.runTest();
}

private void runTest(){
    TechEmployee[] temps = new TechEmployee[3];
    temps[0] = new TechEmployee(0);
    temps[1] = new TechEmployee(1);
    temps[2] = new TechEmployee(2);
    Employee[] emps = Arrays.copyOf(temps, temps.length, Employee[].class);
    System.out.println(Arrays.toString(emps));
}
}

请记住,您不能以相反的方式执行此操作,即您不能将员工[]转换为TechEmployee[]

如果你愿意,这样的事情是可能的

public MySubtype[] convertType(MyObject[] myObjectArray){
   MySubtype[] subtypeArray = new MySubtype[myObjectArray.length];
   List<MyObject> subs = Arrays.asList(myObjectArray);   
   return subs.toArray(subtypeArray);
}
public MySubtype[]convertType(MyObject[]myObjectArray){
MySubtype[]subjectarray=新的MySubtype[myObjectArray.length];
List subs=Arrays.asList(myObjectArray);
返回子数组(子数组);
}

是的,这可能就是解决问题的方法。我正准备亲自发布这篇文章,一个API为我提供了一个可写的数组(类似于上下文中的Object)。它是Hadoop和ArrayWritable,用于数组的专门序列化。我需要将从ArrayWritable(我不控制)返回的基类型转换回其原始类型。所有这些对于ArrayWritable来说都是一个问题的原因是,在某些情况下,类型擦除和大规模的效率需求相结合。