【发布时间】:2015-08-17 05:55:12
【问题描述】:
我有一个 ICoreClient 接口,AClient 和 BClient 类实现了这个。
ICoreClient 向用户公开。
我需要在ICoreClient 接口中添加一个新方法。因此,它需要在两个客户端中实现。我不能使这种方法通用,因为它具有完全不同的签名但相似的功能。
我有 2 个接口 xx 和 yy
ClientA 实现 xx 和 ClientB 实现 yy
所以,我决定在ICoreClient 中添加一个新的testMethod,这将为我提供xx 或yy 的实例,具体取决于客户。
我想根据条件从单个方法返回这些接口的实例。
在ClientA:
public xx testMethod(){
return instanceof xx;
}
在ClientB:
public yy testMethod(){
return instanceof yy;
}
ICoreClient界面应该写什么?
public zz testMethod()
我尝试在xx 和yy 中放置一个虚拟接口 zz(充当通用超类型)来实现此功能。但是仍然无法在各自的客户端中公开xx 和yy 的方法,因为最终它在zz 中进行了类型转换。
这种情况有什么已知的方法吗?
编辑:如果我将返回类型设为Object,这些接口的方法不会暴露。虽然,Object 包含xx 或yy 的实例,
用户仍然需要将其转换为(xx 或yy 用户如何知道?)以使用接口中的方法。我想公开ClientX 的方法而不必转换为@ 987654355@或ClientB...
【问题讨论】:
-
我想返回这些接口的实例 - 你的意思是扩展这个接口的类的实例 对吧?
-
你正在尝试做的事情对我来说似乎很奇怪。我相信有一个更好的解决方案...
-
return instanceof xx应该做什么?这看起来不像是有效的语法。 -
你的接口的方法需要返回一种类型,调用者只能使用该类型的方法(不进行强制转换)。因此,如果您希望调用者能够在不强制转换的情况下调用返回值上的某个方法,则该方法需要在返回类型中。
标签: java design-patterns