Я пытаюсь эффективно искать погоду, когда подкласс реализует метод, имя которого у меня есть в строке с именем _szMethodName
. Я могу получить массив всех методов, которые реализует подкласс, выполнив Method[] _arrClassMethodsList = class.getMethods();
. Затем я могу сравнить имя метода со строковым именем функции, которую я ищу, чтобы определить, будет ли класс реализовывать этот конкретный метод. В настоящее время у меня это работает в цикле for, но по мере роста подкласса это замедляется.
Для реализации цикла:
for (Method method : class.getMethods()){
if(method.getName().equals(_szMethodName)){
//method exists in subclass
break;
}
}
Массив методов из (Только в Java >=7). Я надеялся, что смогу использовать это, используя бинарный поиск или какую-либо другую оптимизацию массива вместо использования цикла for. Однако я еще не смог понять, как реализовать функцию бинарного поиска Java в массиве. Я пробовал использовать компаратор или сравнимый, но пока не добился успеха. Моя последняя реализация компаратора приведена ниже, но в ней есть ошибки, которые я еще не смог устранить.class.getMethods()
отсортирован в алфавитном порядке.
Текущая попытка использования компаратора:
Comparator<Method> c = new Comparator <Method>() {
public int compare(Method method, String string) {
return method.getName().compareTo(string);
}
};
Method[] _arrClassMethodsList = class.getMethods();
int index = Arrays.binarySearch(_arrClassMethodsList, _szMethodName, c);
Будем очень признательны за любую помощь или примеры того, как заставить эту работу работать. Спасибо!
getMethods()
a> говорит, что порядок зависит от реализации (в javadoc явно указано, что элементы в возвращаемом массиве не отсортированы и не расположены в каком-либо конкретном порядке). Я считаю, что в Java 7 это алфавитный порядок, но я считаю, что в Java 6 это был порядок определения. Так что не полагайтесь на это. - person Mark Rotteveel   schedule 20.02.2013