java - 對(duì)于同一個(gè)方法,有沒(méi)有什么優(yōu)雅的方法對(duì)不同來(lái)源的調(diào)用有不同的處理方式?
問(wèn)題描述
我在寫一個(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ù)字。
我原來(lái)的做法是寫一個(gè)特殊的方法獲得這個(gè)%=size 后的結(jié)果。在需要獲取這個(gè)參數(shù)的時(shí)候強(qiáng)轉(zhuǎn)一下。
后來(lái)我改變了一下,利用new Exception().getStackTrace(); 獲取調(diào)用棧的信息來(lái)判斷方法是否被指定類調(diào)用的。這樣就不需要強(qiáng)轉(zhuǎn)和寫一個(gè)子類特有的方法了。
但是這樣的做法會(huì)產(chǎn)生大量的垃圾內(nèi)存,頻繁引起GC,所以考慮用回第一種方法來(lái)處理了。但是強(qiáng)轉(zhuǎn)總是有點(diǎn)讓人不爽,感覺(jué)沒(méi)有什么復(fù)用性。(雖然是代碼爛的原因。。而且這樣做這個(gè)subViewPager的復(fù)用性也降低了)所以就想來(lái)請(qǐng)教一下有什么辦法讓同一個(gè)方法在不同類中被調(diào)用時(shí)有什么辦法可以優(yōu)雅的做出不同的操作?
問(wèn)題解答
回答1:subViewPager重寫getCurrentItem()不就可以了嗎。。
回答2:看過(guò)類似的庫(kù)的實(shí)現(xiàn)方案,如果你的這個(gè)方法內(nèi)部和外部調(diào)用的返回的業(yè)務(wù)邏輯就不統(tǒng)一的話,建議還是額外定義一個(gè)方法比較好……比如 getCurrentRealItem()
