我无法想出如何在标题中描述我的问题。 我想要完成的是这样的:(伪代码)
SuperClass[] superArray = new SuperClass[];
// work on superArray
// ...
SubClass[] subArray = superArray.asAnArrayOfSubClass();
` 这样的事情可能吗?
答案 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