有a method:
public DimseRSP cfind(String asuid, String cuid, int priority,
Attributes data, String tsuid, int autoCancel) throws IOException,
InterruptedException {
FutureDimseRSP rsp = new FutureDimseRSP(nextMessageID());
rsp.setAutoCancel(autoCancel);
cfind(asuid, cuid, priority, data, tsuid, rsp);
return rsp;
}
我在我的应用程序中调用
DimseRSP rsp = association.cfind(...
然后我可以使用
rsp.someMethodOfTheDimseRSPClass()
哪个有效,但我想打电话
rsp.someMethodOfTheFutureDimseRSPClass()
相反,这应该是可能的,因为rsp
是FutureDimseRSP
实际从cfind()
返回的实例,但当然我的IDE给了我一个错误,因为它认为{ {1}}只是rsp
。
我该怎么办?我可以以某种方式将DimseRSP
投射到DimseRSP
以便它可以工作吗?
答案 0 :(得分:1)
如果您害怕rsp
可能并非总是 FutureDimseRSP
的实例,请使用instanceof
:
if (rsp instanceof FutureDimseRSP) {
((FutureDimseRSP)rsp).someMethodOfTheFutureDimseRSPClass();
}
else {
// handle this...
}
答案 1 :(得分:1)
另一个答案在技术上是正确的,你可以检查类型,如果可能的话,进行向下倾斜。
但事情是:这样做通常是错误的方法。因为“签名说它返回超级阶级”的全部意义在于你不需要进行向下转换。
换句话说:简单的解决方案是检查/强制转换。更好的解决方案是退回去了解全局,然后决定是否有办法避免进行检查/转换。例如,通过将该方法移动到超类中。或者通过定义定义该方法的接口,以便您的方法返回该接口。或者,或者 - 或许多选项。
答案 2 :(得分:0)
如果你不想演员,那么你总是可以添加抽象函数或正常函数&some 34; someMethodOfTheFutureDimseRSPClass"在DimseRSP类中并通过继承,函数" someMethodOfTheFutureDimseRSPClass"这将是FutureDimseRSP类的一部分将被调用。