如何动态转换子类

时间:2017-09-06 12:48:48

标签: java class casting

方案: 我有两种不同类型的课程:FusEth。它们都扩展了一个名为Abs的抽象类。

根据我必须将Abs投射到FusEth的其他信息。

我有类似

的东西
while((rec == queue.poll()) != null) {
     insertInto(--rec-- Something here);
}

其中queueArrayDeque<Abs>recAbs的类型。 我想要实现的是在方法insertInto中强制转换rec因为我已经实现了2个方法:一个是insertInto(Fus rec)而另一个是insertInto(Eth rec)

我想投射rec

这样的东西
Class typeOf;
if (cond1)
    typeOf = Eth.class;
else
    typeOf = Fus.class;

通过这种方式,在insertInto(--rec--)中,我可以使用typeOf

投射该rec

修改即可。试着向我解释一下。

我想要实现的是:我已经知道,在while之前,我想要投射哪种子类rec,这意味着我想直接投射rec子类。类似的东西:

insertInto((typeOf) rec)

所以我可以使用方法insertInto的重载。 但当然这不起作用,因为typeOf是Class对象

EDIT2 其他一些代码希望它可以解释我想要实现的目标:

Class typeOf;
if (condA) {
    typeOf = Fus.class;
} else {
    typeOf = Eth.class;
}

while ((rec = queue.poll()) != null) {
    insertInto((typeOf) rec); //Problem of course is here
}

1 个答案:

答案 0 :(得分:0)

你可以使用反射来做到这一点。

Function<? extends Abs, ?> fn // Second one is your return type
if (cond1)
    fn = rec -> this.getClass().getDeclaredMethod("insertInto", Eth.class).invoke(rec);

fn(rec)

虽然我不会建议