我有一個類使用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