首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java方法说返回类的对象,但返回SubClass的对象

Java方法说返回类的对象,但返回SubClass的对象
EN

Stack Overflow用户
提问于 2018-04-03 11:28:19
回答 3查看 105关注 0票数 1

一种方法

代码语言:javascript
复制
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;
}

我调用我的应用程序就像

代码语言:javascript
复制
DimseRSP rsp = association.cfind(...

然后我就可以用

代码语言:javascript
复制
rsp.someMethodOfTheDimseRSPClass()

可以,但我想打电话给

代码语言:javascript
复制
rsp.someMethodOfTheFutureDimseRSPClass()

相反,这应该是可能的,因为rsp是实际上从cfind()返回的FutureDimseRSP的一个实例,但是当然,我的IDE会给我一个错误,因为它认为rsp只是一个DimseRSP

我该怎么办?我能以某种方式将DimseRSP转换为FutureDimseRSP,这样它才能工作吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-04-03 11:36:42

如果您害怕rsp可能并不总是 FutureDimseRSP的一个实例,请使用instanceof

代码语言:javascript
复制
if (rsp instanceof FutureDimseRSP) {
    ((FutureDimseRSP)rsp).someMethodOfTheFutureDimseRSPClass();
}
else {
    // handle this...
}
票数 1
EN

Stack Overflow用户

发布于 2018-04-03 11:39:43

另一个答案在技术上是正确的,您可以检查类型,以便在可能的情况下生成一个下拉式

但问题是:这样做往往是错误的做法。因为“签名说它返回超类”的全部意思是您做了,而不是需要进行降级。

换句话说:简单的解决方案是检查/转换。更好的解决方案是退一步,了解整个情况,然后决定是否有办法避免进行检查/强制转换。例如,将该方法移到超类中。或者通过定义定义该方法的接口,使您的方法返回该接口。或者,或者-很多选择。

票数 1
EN

Stack Overflow用户

发布于 2018-04-03 12:09:05

如果不想进行强制转换,那么可以在someMethodOfTheFutureDimseRSPClass类中添加抽象函数或普通函数"someMethodOfTheFutureDimseRSPClass“,通过继承,将调用作为FutureDimseRSP类一部分的函数"someMethodOfTheFutureDimseRSPClass”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49628944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档