有一种方法
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是实际上从cfind()返回的FutureDimseRSP的一个实例,但是当然,我的IDE会给我一个错误,因为它认为rsp只是一个DimseRSP。
我该怎么办?我能以某种方式将DimseRSP转换为FutureDimseRSP,这样它才能工作吗?
发布于 2018-04-03 11:36:42
如果您害怕rsp可能并不总是 FutureDimseRSP的一个实例,请使用instanceof
if (rsp instanceof FutureDimseRSP) {
((FutureDimseRSP)rsp).someMethodOfTheFutureDimseRSPClass();
}
else {
// handle this...
}发布于 2018-04-03 11:39:43
另一个答案在技术上是正确的,您可以检查类型,以便在可能的情况下生成一个下拉式。
但问题是:这样做往往是错误的做法。因为“签名说它返回超类”的全部意思是您做了,而不是需要进行降级。
换句话说:简单的解决方案是检查/转换。更好的解决方案是退一步,了解整个情况,然后决定是否有办法避免进行检查/强制转换。例如,将该方法移到超类中。或者通过定义定义该方法的接口,使您的方法返回该接口。或者,或者-很多选择。
发布于 2018-04-03 12:09:05
如果不想进行强制转换,那么可以在someMethodOfTheFutureDimseRSPClass类中添加抽象函数或普通函数"someMethodOfTheFutureDimseRSPClass“,通过继承,将调用作为FutureDimseRSP类一部分的函数"someMethodOfTheFutureDimseRSPClass”。
https://stackoverflow.com/questions/49628944
复制相似问题