1 回答

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果您NumCells這樣定義接口,它就可以工作:
type NumCells interface{
Cells
Add(NumCells) NumCells // returns either IntCells or FloatCells
}
然后,您需要同時(shí)使用IntCells和FloatCells來(lái)實(shí)現(xiàn)Add并返回其中一種類型。
這是一個(gè)工作場(chǎng)所,使用方法鏈接并打印結(jié)果:
https://play.golang.org/p/W7DzcB4A3NH
正如評(píng)論中所述,在使用接口時(shí),人們通常希望使每種類型與其余實(shí)現(xiàn)無(wú)關(guān),并且只使用沒(méi)有類型開關(guān)的接口。
避免在 的實(shí)現(xiàn)中進(jìn)行這些類型切換的一種方法Add可能是在 中添加另一種方法,以NumCells將特定位置作為float64.
type NumCells interface{
Cells
Add(NumCells) NumCells // returns either IntCells or FloatCells
GetCell(index int) float64
}
這樣您就可以獲取該值,而無(wú)需斷言特定類型。
由于IntCells無(wú)法容納float64值,它仍然需要?jiǎng)?chuàng)建 aFloatCells來(lái)返回它,如果我們想避免IntCells這樣做,我們需要使用工廠模式或類似的方式以某種方式抽象對(duì)象的創(chuàng)建。
- 1 回答
- 0 關(guān)注
- 160 瀏覽
添加回答
舉報(bào)