搜尋

首頁  >  問答  >  主體

java - 對於同一個方法,有沒有優雅的方法對不同來源的呼叫有不同的處理方式?

我在寫一個控制項的時候。
有一個類別subViewPager繼承了ViewPager,我在另一個地方需要用到這個ViewPagergetCurrentItem()方法,意思就是要取得這個控件的某個座標。

但由於我這個ViewPager為了特殊效果,就讓它的getCurrentItem()傳回的座標有可能超出了我資料集合的長度size# ,

例如我的資料集合的長度為size = 1024
getCurrentItem()傳回的是40280

所以在我主動呼叫他的時候我希望他能回傳給我的是這個座標%=size : 4028 24的結果。

同時他的getCurrentItem()方法被系統呼叫時應該回傳應該是40280這樣的數字。

我原來的做法是寫一個特殊的方法得到這個%=size 後的結果。在需要取得這個參數的時候強轉一下。

後來我改變了一下,利用new Exception().getStackTrace(); 取得呼叫堆疊的資訊來判斷方法是否被指定類別呼叫的。這樣就不需要強轉和寫一個子類別特有的方法了。

但是這樣的做法會產生大量的垃圾內存,頻繁引起GC,所以考慮用回第一種方法來處理了。
但強轉總是有點讓人不爽,感覺沒有什麼復用性。 (雖然是程式碼爛的原因。。而且這樣做這個subViewPager的複用性也降低了)所以就想來請教一下有什麼辦法讓同一個方法在不同類別中被呼叫時有什麼辦法可以優雅的做出不同的操作?

淡淡烟草味淡淡烟草味2775 天前1299

全部回覆(2)我來回復

  • 大家讲道理

    大家讲道理2017-07-03 11:44:06

    subViewPager重寫getCurrentItem()不就可以了嗎。 。

    回覆
    0
  • 欧阳克

    欧阳克2017-07-03 11:44:06

    看過類似的函式庫的實作方案,如果你的這個方法內部和外部呼叫的回傳的業務邏輯就不統一的話,建議還是額外定義一個方法比較好…比如 getCurrentRealItem()

    回覆
    0
  • 取消回覆