Код не выбрасывает исключение
Я пытаюсь выполнить ниже написанный код, и код должен выдать исключение, но это не так
try {
Field.class.getMethod("getInt", Object.class).setAccessible(false);
StringSearch.class.getMethod("searchChars",cc.getClass(),pattern3.getClass()).setAccessible(false);
ss4.getClass().getMethod("searchChars",cc.getClass(),pattern3.getClass()).setAccessible(false);
ss4.searchChars(cc,pattern3);
ss4.searchString(str,pattern);
}
catch(NoSuchMethodException ex){
ex.printStackTrace();
}
это должно фактически выдать IllegalAccessException.
ss4 - это объект класса BNDMWildcardsCI (один из алгоритмов поиска строк) cc, pattern3 - массивы символов str, pattern - строки
почему он не выдает исключение, он не выдает исключение NoSuchMethodFound, означает, что он может найти метод, также я попытался напечатать isAccessible, и он говорит false, но когда я запускаю тесты, он не выдает никакого исключения
2 ответа
Насколько мне известно, если метод объявлен общедоступным (или иным образом доступным), setAccessible(false)
не могу сделать это частным. Это полезно, только если у вас есть приватный метод, и вы ранее вызывали setAccessible(true)
,
Метод setAccessible(boolean)
работа над объектом отражается не на нормальном объекте. В вашем коде вы устанавливаете его на объект метода, а не на ss4
объект.
Чтобы показать мою точку зрения:
Class<?> clazz = ss4.getClass();
Method searchCharsMethod = clazz.getMethod("searchChars",cc.getClass(),pattern3.getClass());
searchCharsMethod.setAccessible(true);
Вы установили для флага доступа значение false на объекте, назначенном для searchCharsMethod
не ss4
,
В качестве бонуса посмотрим, что произойдет, когда вы звоните
searchCharsMethod.invoke(ss4,cc,pattern3);
Для более подробной информации, пожалуйста, прочитайте документацию