Код не выбрасывает исключение

Я пытаюсь выполнить ниже написанный код, и код должен выдать исключение, но это не так

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);

Для более подробной информации, пожалуйста, прочитайте документацию

Другие вопросы по тегам