3

我有一个实现存储 Comparable 对象的数据结构的类。一些实例包含 Long 和其他字符串。

我想统计发生的比较次数,而无需过多地更改数据结构类或应用程序。

一个自然的想法是实现一个新类(比如 MyLong),它的 compareTo() 增加一些统计计数器,然后调用真正的 compareTo()。然后将应用程序更改为存储 MyLongs 而不是 Longs 等。这不起作用,因为我不能从 Long 或 String 继承。

可以使这种方法起作用吗?有没有其他方法可以实现这个目标?

4

3 回答 3

2

“更喜欢组合而不是继承”

编写一个新类 MyLong,它实现了 Comparable(并且可能扩展了 Number)并包含一个 Long。然后让它将所有调用传递给包含的 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 回答