如何设置Long / String compareTo()?

时间:2011-08-23 20:10:10

标签: java primitive-types compareto function-interposition

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

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

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

这种方法可以起作用吗?还有另一种方法可以实现这个目标吗?

3 个答案:

答案 0 :(得分:2)

“更喜欢构图而不是继承”

编写一个实现Comparable的新类MyLong(可能扩展Number)并包含一个Long。然后让它将所有调用传递给包含的Long,除了你要检测的那些;对于那些它递增计数器并将它们传递给Long。

答案 1 :(得分:1)

你可以用AspectJ很早就做到这一点。

你基本上会在实现类的compareTo方法周围写一个切入点并在那里添加一个计数器。

答案 2 :(得分:0)

如果项目的条件允许,您的数据结构可以存储实现Comparator接口的对象。自定义比较器可能允许您计算使用给定比较器进行的比较总数。只是一个想法。