dev*_*v ツ 15 java design-patterns
我有一个ICoreClient接口,AClient并且BClient类实现了这一点.
ICoreClient 暴露给用户.
我需要在ICoreClient界面中添加一个新方法.因此,它需要在两个客户端中实现.我不能使这种方法通用,因为它具有完全不同的签名但功能相似.
我有2个接口xx和yy
ClientA实现xx和ClientB实现yy
所以,我决定添加一个新testMethod的ICoreClient,它将为我提供xx或yy取决于客户的实例.
我想根据条件从单个方法返回这些接口的实例.
在ClientA:
public xx testMethod(){
return instanceof xx;
}
Run Code Online (Sandbox Code Playgroud)
在ClientB:
public yy testMethod(){
return instanceof yy;
}
Run Code Online (Sandbox Code Playgroud)
我应该在ICoreClient界面中写什么?
public zz testMethod()
Run Code Online (Sandbox Code Playgroud)
我尝试了一个虚拟接口 zz(作为一个常见的超类型),xx并yy正在实现这一点.但还是没能揭露的方法xx,并yy在最后为它得到的类型强制转换各自的客户zz.
对于这种情况,有没有任何已知的方法?
编辑:如果我返回类型Object,则不公开这些接口的方法.虽然,Object包含xxor 的实例yy,
用户仍然需要将它转换为(xx或yy用户将如何知道?)以使用接口中的方法..我想暴露ClientX无需转换的方法ClientA或ClientB...
Psh*_*emo 38
编辑后,您可能正在寻找泛型.你可以像这样制作你的界面
interface ICoreClient<T>{// T will be set by each class implementing this interface
T testMethod();
}
Run Code Online (Sandbox Code Playgroud)
你的每个课程都可以看起来像
class ClientA implements ICoreClient<xx>{
xx testMethod(){
//return xx
}
}
class ClientB implements ICoreClient<yy>{
yy testMethod(){
//return yy
}
}
Run Code Online (Sandbox Code Playgroud)
Era*_*ran 16
只有xx并且yy具有共同的超类型(接口或类)才有可能.在最坏的情况下,您始终可以返回Object.
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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4636 次 |
| 最近记录: |