繁体   English   中英

确保对象将实现接口

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM