java方法可以根据条件返回值吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

我有一个ICoreClient接口AClientBClient类实现了这一点。

ICoreClient 暴露给用户。

我需要在ICoreClient界面中添加一个新的方法。所以,它需要在两个客户端实施。我不能使这个方法是通用的,因为它具有完全不同的签名但具有相似的功能。

我有2个接口xxyy

ClientA实现xxClientB实现yy

所以,我决定增加一个新内容testMethodICoreClient这将为我提供客户实例xxyy依赖客户。

我想根据条件从单一方法返回这些接口的实例。

ClientA

public xx testMethod(){
  return instanceof xx;
}

ClientB

public yy testMethod(){
  return instanceof yy;
}

我应该在ICoreClient界面中写什么?

public zz testMethod()

我试着把一个虚拟接口 zz(作为一个普通的超类型)xx并且yy正在实现这一点。但仍然无法展示其各自客户的方法,xxyy最终被暴露出来zz

有什么已知的方法来处理这种情况?

如果我使返回类型Object,这些接口的方法不公开。虽然,Object包含xxor 的实例yy

用户仍然需要将其转换为(xx或者yy用户将如何知道?)以使用界面中的方法..我想公开方法ClientX而不必转换为ClientAClientB...

提问于
用户回答回答于

编辑之后,它看起来像您可能正在寻找泛型。你可以像这样制作你的界面

interface ICoreClient<T>{// T will be set by each class implementing this interface
    T testMethod();
}

并且你的每个类都可以看起来像

class ClientA implements ICoreClient<xx>{
    xx testMethod(){
        //return xx
    }
}

class ClientB implements ICoreClient<yy>{
    yy testMethod(){
        //return yy
    }
}
用户回答回答于

只有在xxyy有一个普通的超级类型(接口或类)。在最坏的情况下,您总是可以返回对象。

public Object testMethod () // or a more specific common super type of `xx` and `yy`
{    
    if (..some condition..) {
        return ..instanceof `xx`..;
    } else if (..other condition..) {
        return ..instanceof `yy`..;
    }
    return null; // or some other default instnace
}

扫码关注云+社区