我在寫一個控制項的時候。
有一個類別subViewPager
繼承了ViewPager
,我在另一個地方需要用到這個ViewPager
的getCurrentItem()
方法,意思就是要取得這個控件的某個座標。
但由於我這個ViewPager
為了特殊效果,就讓它的getCurrentItem()
傳回的座標有可能超出了我資料集合的長度size
# ,
例如我的資料集合的長度為
size = 1024
而getCurrentItem()
傳回的是40280
所以在我主動呼叫他的時候我希望他能回傳給我的是這個座標%=size : 4028 24
的結果。
同時他的getCurrentItem()
方法被系統呼叫時應該回傳應該是40280
這樣的數字。
我原來的做法是寫一個特殊的方法得到這個%=size
後的結果。在需要取得這個參數的時候強轉一下。
後來我改變了一下,利用new Exception().getStackTrace();
取得呼叫堆疊的資訊來判斷方法是否被指定類別呼叫的。這樣就不需要強轉和寫一個子類別特有的方法了。
但是這樣的做法會產生大量的垃圾內存,頻繁引起GC
,所以考慮用回第一種方法來處理了。
但強轉總是有點讓人不爽,感覺沒有什麼復用性。 (雖然是程式碼爛的原因。。而且這樣做這個subViewPager
的複用性也降低了)所以就想來請教一下有什麼辦法讓同一個方法在不同類別中被呼叫時有什麼辦法可以優雅的做出不同的操作?
subViewPager重寫getCurrentItem()不就可以了嗎。 。
看過類似的函式庫的實作方案,如果你的這個方法內部和外部呼叫的回傳的業務邏輯就不統一的話,建議還是額外定義一個方法比較好…比如
getCurrentRealItem()