我有一个父类和一些子类(让我们称之为parent
和child1
,child2
,child3
等。< / p>
我有一个函数,它采用parents
的二维数组并将其展平为一维数组,如下所示:
public parent[] flatten(parent[][] input);
在调用上下文中,我知道当我传递一个数组时,所有元素都具有相同的类型,并且该类型是子类型之一(特别是,我知道它是WHICH子类型)。我希望能够获取数组的特定元素,并将其分配给正确的子类型的变量,如下所示:
child1 c = flatten(input)[0];
我知道类型断言(相关SO帖子:Assert an object is a specific type),但是如果断言成功,我似乎找不到实际分配给正确类型变量的方法。在Java中这样的事情是否可能?我知道在其他语言中也是可能的,例如Go。
答案 0 :(得分:1)
你真的想把它分配给某些Child类型吗?如果方法也在Parent
类中定义,则可以使用Child
类引用来访问Parent
类方法。
否则,您可以输入强制类型:
child1 c = (child1)flatten(input)[0];
但是,您应确保该类型仅为child1
。通常,类型转换不是一个好主意。这是代码不好的标志(但并非总是如此)。你应该尽量避免它。
答案 1 :(得分:1)
尝试“施放”,如下所示:
Child1 c = (Parent)flatten(input)[0];
答案 2 :(得分:1)
我认为值得一提的是,如果您不想对异常处理感到烦恼,可以检查对象的实例。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof
TL; DR:检查您要投射到的课程的实例。
if (flatten(input)[0] instanceof child1)
Child1 c = (Parent)flatten(input)[0];
答案 3 :(得分:1)
你不能allocate generic arrays,但是如果你愿意传递一个外派,你可以使用泛型来为你照看演员:
public <T extends Parent> boolean addAll(T[][] input,
T[] output) {
//set up you indices
output[x] = input[z];
return true;
}
如果传入不匹配的输入/输出,则会出现运行时错误,否则它应该正常工作。