【问题标题】:how do I interpose on Long/String compareTo()?如何插入 Long/String compareTo()?
【发布时间】:2011-08-23 20:10:10
【问题描述】:

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

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

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

这种方法是否可行?有没有其他方法可以实现这个目标?

【问题讨论】:

    标签: java primitive-types compareto function-interposition


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-07-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-27
          • 1970-01-01
          • 1970-01-01
          • 2014-04-20
          相关资源
          最近更新 更多