我有一个类使用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();
'如果抛出新的(酒吧的instanceof Iinterface!)抛出:IllegalArgumentException()'? – Dorus
我更喜欢找到一种方法在编译时强制它 –
如何将构造函数更改为'public BarWrapper(Iinterface bar)[...]'。如果你确实使用'Bar'中的任何方法,而不是'Iinterface'中的方法,我建议你将这些添加到'Iinterface'中(将接口扩展到'IinterfaceBar'中)。 – Dorus