确保一个对象将实现一个接口

Making sure an object will implements an interface

我得到了一个使用 Proxy 的 class。它看起来像这样:

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是一些superclass动态类型会是一个导数

我有一个接口,我希望包装器实现该接口并继续使用具有相同方法的代理,但是 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;
}