3

Comparableオブジェクトを格納するデータ構造を実装するクラスがあります。一部のインスタンスはLongsおよびその他のStringsを保持します。

データ構造クラスやアプリケーションをあまり変更せずに、発生した比較の数を数えたいです。

1つの自然なアイデアは、compareTo()が統計カウンターをインクリメントしてから実際のcompareTo()を呼び出す新しいクラス(たとえばMyLong)を実装することです。次に、Longsなどの代わりにMyLongsを保存するようにアプリを変更します。LongまたはStringから継承できないため、これは機能しません。

このアプローチを機能させることはできますか?この目標を達成する別の方法はありますか?

4

3 に答える 3

2

「継承よりも構成を優先する」

Comparableを実装し(おそらくNumberを拡張し)、Longを含む新しいクラスMyLongを記述します。次に、インストルメントしたいものを除いて、含まれているLongにすべての呼び出しを渡します。それらの場合、カウンターをインクリメントしてLongに渡します。

于 2011-08-23T20:17:07.907 に答える
1

あなたはAspectJでかなり早い段階でそれを行うことができます。

基本的に、実装クラスのcompareToメソッドの周りにポイントカットを記述し、そこにカウンターを追加します。

于 2011-08-23T20:17:30.693 に答える
0

プロジェクトの基準が許せば、データ構造にComparatorインターフェースを実装するオブジェクトを格納できます。カスタムコンパレータを使用すると、特定のコンパレータで行われた比較の総数をカウントできる場合があります。ちょっとした考え。

于 2011-08-23T20:17:28.063 に答える