検索

ホームページ  >  に質問  >  本文

java - 同じメソッドに対して、異なるソースからの呼び出しを異なる方法で処理するエレガントな方法はありますか?

コントロールを書いていたときのこと。
ViewPager を継承するクラス subViewPager があります。この ViewPagergetCurrentItem() メソッドを別のクラスで使用する必要があります。これは、このコントロールの特定の座標を取得することを意味します。

しかし、私の

ViewPager は特殊効果用であるため、その getCurrentItem() によって返される座標は、データ コレクションの長さ size ,## を超える可能性があります。

#たとえば、データ コレクションの長さは
size = 1024

で、getCurrentItem()
40280# を返します。 ##なので、私が積極的に電話をかけると、座標

%=size: 4028 24
の結果が返ってくるといいですね。

同時に、彼の getCurrentItem()

メソッドは、システムによって呼び出されたときに

40280 のような数値を返す必要があります。 私の当初のアプローチは、%=size

の後に結果を取得する特別なメソッドを記述することでした。このパラメータを取得する必要がある場合は強制的に実行します。

その後、少し変更して、new Exception().getStackTrace();

を使用してコール スタック情報を取得し、メソッドが指定されたクラスによって呼び出されたかどうかを判断しました。これにより、サブクラス固有のメソッドを強制的に作成する必要がなくなります。

ただし、この方法では大量のガベージ メモリが生成され、頻繁に GC

が発生するため、最初の方法で対処することを検討してください。

しかし、強制転送は常に少し不快で、再利用性がないように感じます。 (コードが悪いからですが…これを行うと subViewPager の再利用性も低下します) そこで、同じメソッドを異なるクラスで呼び出す方法があるかどうかを聞きたかったのです。さまざまな操作をスムーズに実行できますか?

淡淡烟草味淡淡烟草味2813日前1328

全員に返信(2)返信します

  • 大家讲道理

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

    subViewPager が getCurrentItem() をオーバーライドするだけでは十分ではないでしょうか? 。

    返事
    0
  • 欧阳克

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

    同様のライブラリの実装ソリューションを見てきましたが、メソッドの内部呼び出しと外部呼び出しによって返されるビジネス ロジックに一貫性がない場合は、追加のメソッドを定義することをお勧めします...たとえば getCurrentRealItem()

    返事
    0
  • キャンセル返事