用方法创建对象数组

时间:2018-02-08 08:44:45

标签: java arrays oop

我无法想出如何在标题中描述我的问题。 我想要完成的是这样的:(伪代码)

SuperClass[] superArray = new SuperClass[];
// work on superArray
// ...
SubClass[] subArray = superArray.asAnArrayOfSubClass();

` 这样的事情可能吗?

4 个答案:

答案 0 :(得分:1)

您无法向数组中添加成员:方法或字段。所以不,这是不可能的:

 SubClass[] subArray = superArray.asAnArrayOfSubClass();  

要定义数组的行为,请创建一个传递数组的方法:

SubClass[] doThat(SuperClass[] superArray){
    ....
}

即使在概念上,类型也不应该知道它的子类型,如果是你的要求,将手动特定类型的数组转换为此特定类型的子类数组是有效的。
例如,您可以将员工存储在一个阵列中,该阵列随时被提升为经理。此方法可以执行此转换:

Manager[] promote(Employee[] employees){      
   Manager[] managers = new Manager[employees.length];
   for (int i=0; i<employees.length; i++){
         Employee e = employee[i];
         managers[i] = new Manager(....);
   }
   return managers;
}

答案 1 :(得分:0)

没有。不可能。因为不是每个父母都是孩子。反之亦然,因为每个孩子都是父母。

见下面的例子。

Object[] supers = new Object[5];
Integer[] childs = supers // Errrr.. No I have Strings, Doubles too

但反过来可能

Integer[] childs = new Integer[5];
Object[] supers = childs // Ok, I can hold any object.

答案 2 :(得分:0)

您的子类应该匹配超类wrt属性和方法,并且您只是覆盖它们。

以下是如何使用流API执行此操作的示例。

 Number[] array = new Number[]{12, 20, 30, 40};

    List<Integer> list  = Arrays.stream(array)
            .map(e -> (Integer) e)
            .collect(Collectors.toList());

    System.out.println(list.toArray());

答案 3 :(得分:0)

转换为子类是一种代码味道,您可能应该重新考虑您的设计。还尝试使用java集合api(Iterable,Collection,List),使用泛型,而不是原始数组,您可以子类添加自己的方法,如下例所示:

inventory_date