确保一个对象将实现一个接口
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;
}
我得到了一个使用 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;
}