我有一个实现存储Comparable对象的数据结构的类。 有些实例持有Longs和其他字符串。
我想计算发生的比较次数,而不会过多地更改数据结构类或应用程序。
一个自然的想法是实现一个新类(比如MyLong),其compareTo()递增一些统计计数器,然后调用真正的compareTo()。然后更改应用程序以存储MyLongs而不是Longs等。这不起作用,因为我不能从Long或String继承。
这种方法可以起作用吗?还有另一种方法可以实现这个目标吗?
答案 0 :(得分:2)
“更喜欢构图而不是继承”
编写一个实现Comparable的新类MyLong(可能扩展Number)并包含一个Long。然后让它将所有调用传递给包含的Long,除了你要检测的那些;对于那些它递增计数器并将它们传递给Long。
答案 1 :(得分:1)
你可以用AspectJ很早就做到这一点。
你基本上会在实现类的compareTo方法周围写一个切入点并在那里添加一个计数器。
答案 2 :(得分:0)
如果项目的条件允许,您的数据结构可以存储实现Comparator接口的对象。自定义比较器可能允许您计算使用给定比较器进行的比较总数。只是一个想法。