方案:
我有两种不同类型的课程:Fus
和Eth
。它们都扩展了一个名为Abs
的抽象类。
根据我必须将Abs
投射到Fus
或Eth
的其他信息。
我有类似
的东西while((rec == queue.poll()) != null) {
insertInto(--rec-- Something here);
}
其中queue
是ArrayDeque<Abs>
,rec
是Abs
的类型。
我想要实现的是在方法insertInto中强制转换rec
因为我已经实现了2个方法:一个是insertInto(Fus rec)
而另一个是insertInto(Eth rec)
。
我想投射rec
。
像
这样的东西Class typeOf;
if (cond1)
typeOf = Eth.class;
else
typeOf = Fus.class;
通过这种方式,在insertInto(--rec--)
中,我可以使用typeOf
修改即可。试着向我解释一下。
我想要实现的是:我已经知道,在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
}
答案 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)
虽然我不会建议