как вставить в Long / String compareTo ()? - PullRequest
3 голосов
/ 24 августа 2011

У меня есть класс, реализующий структуру данных, хранящую сопоставимые объекты. Некоторые экземпляры содержат Long и другие строки.

Я хочу посчитать количество выполненных сравнений, не слишком меняя класс структуры данных или приложение.

Одна естественная идея состоит в том, чтобы реализовать новый класс (скажем, MyLong), которым compareTo () увеличивает некоторый статистический счетчик, а затем вызывает реальный compareTo (). Затем измените приложение, чтобы хранить MyLongs вместо Long и т. Д. Это не работает, потому что я не могу наследовать от Long или String.

Можно ли заставить этот подход работать? Есть ли другой способ достижения этой цели?

Ответы [ 3 ]

2 голосов
/ 24 августа 2011

«предпочитаю композицию наследованию»

Напишите новый класс MyLong, который реализует Comparable (и, вероятно, расширяет Number) и содержит Long. Затем сделайте так, чтобы он передавал все вызовы на содержащийся Long, кроме тех, которые вы хотите инструментировать; для тех он увеличивает счетчик и передает их Long.

1 голос
/ 24 августа 2011

Вы можете сделать это довольно рано с AspectJ .

В основном вы бы написали pointcut вокруг вашего метода CompareTo реализующего класса и добавили бы туда счетчик.

0 голосов
/ 24 августа 2011

Если позволяют критерии вашего проекта, ваша структура данных может хранить объекты, которые реализуют интерфейс Comparator .Пользовательский компаратор может позволить вам подсчитать общее количество сравнений, выполненных с данным компаратором.Просто мысль.

...