[英]Making sure an object will implements an interface
我有一个使用Proxy
的类。 看起来像这样:
public class BarWrapper
{
private final Bar bar;
public BarWrapper(Bar bar)
{
this.bar = bar;
}
public int someMethodInBar()
{
return bar.someMethodInBar();
}
public int someMethodInBar2()
{
return bar.someMethodInBar2();
}
public int someMethodInBar3()
{
return bar.someMethodInBar3();
}
// etc
}
Bar
是一些超类,动态类型将是派生的。
我有一个接口,我希望包装器实现该接口并继续使用相同的方法使用代理,但是Bar
本身未实现该接口,因此我无权访问它。 如何强制用户传递一个动态类型,该类型不仅是Bar
的派生类,而且实现了接口,所以我这样做没有问题:
(Iinterface)bar.interfaceMethod();
如果您需要包装的对象既是Bar的子类又是Foo的接口实例,则Bar不会实现,那么我看到的唯一方法是接受实现Foo的Bar的子类:
public abstract FooBar extends Bar implements Foo {
}
那将完成您想要的事情:用户将被强制扩展FooBar,从而提供实现Foo的Bar的子类。
代替接受对象Bar
,仅接受接口。
private final Iinterface bar;
public BarWrapper(Iinterface bar)
{
this.bar = bar;
}
这确实需要您的代理仅调用接口中的方法。 您可能还想调用Bar
方法,而不是Iinterface
。 在编译时强制执行此操作的唯一方法是将这些方法添加到接口,或者扩展接口:
public interface IinterfaceBarWrapper implements Iinterface
{
public void someMethodInBar();
public void someMethodInBar2();
public void someMethodInBar3();
}
...
private final IinterfaceBarWrapper bar;
public BarWrapper(IinterfaceBarWrapper bar)
{
this.bar = bar;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.