我在寫一個(gè)控件的時(shí)候。
有一個(gè)類subViewPager
繼承了ViewPager
,我在另外一個(gè)地方需要用到這個(gè)ViewPager
的getCurrentItem()
方法,意思就是獲取這個(gè)控件的某個(gè)坐標(biāo)。
但是由于我這個(gè)ViewPager
為了特殊效果,就讓它的getCurrentItem()
返回的坐標(biāo)有可能超出了我數(shù)據(jù)集合的長(zhǎng)度size
,
比如我的數(shù)據(jù)集合的長(zhǎng)度為
size = 1024
而getCurrentItem()
返回的是40280
所以在我主動(dòng)調(diào)用他的時(shí)候我希望他能返回給我的是這個(gè)坐標(biāo)%=size : 4028%1024
的結(jié)果。
同時(shí)他的getCurrentItem()
方法被系統(tǒng)調(diào)用時(shí)應(yīng)該返回應(yīng)該是40280
這樣的數(shù)字。
我原來的做法是寫一個(gè)特殊的方法獲得這個(gè)%=size
后的結(jié)果。在需要獲取這個(gè)參數(shù)的時(shí)候強(qiáng)轉(zhuǎn)一下。
后來我改變了一下,利用new Exception().getStackTrace();
獲取調(diào)用棧的信息來判斷方法是否被指定類調(diào)用的。這樣就不需要強(qiáng)轉(zhuǎn)和寫一個(gè)子類特有的方法了。
但是這樣的做法會(huì)產(chǎn)生大量的垃圾內(nèi)存,頻繁引起GC
,所以考慮用回第一種方法來處理了。
但是強(qiáng)轉(zhuǎn)總是有點(diǎn)讓人不爽,感覺沒有什么復(fù)用性。(雖然是代碼爛的原因。。而且這樣做這個(gè)subViewPager
的復(fù)用性也降低了)所以就想來請(qǐng)教一下有什么辦法讓同一個(gè)方法在不同類中被調(diào)用時(shí)有什么辦法可以優(yōu)雅的做出不同的操作?
看過類似的庫的實(shí)現(xiàn)方案,如果你的這個(gè)方法內(nèi)部和外部調(diào)用的返回的業(yè)務(wù)邏輯就不統(tǒng)一的話,建議還是額外定義一個(gè)方法比較好……比如 getCurrentRealItem()
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)