Какой-либо способ Вызвать закрытый метод?

попробуйте это как другой метод кодирования вашей программы:

 while True:
        number=int(input("Please enter an integer between 0 and 127: "))
        if number>127 or number<0 :
            print("I'm sorry, that is not an acceptable value. Please try again")
        elif number<=127 and number>=0 :
            print("WIP")
            break
        else:
            print("I'm sorry, something went wrong. Please try again and be sure to enter an integer between 0 and 127.")
136
задан Sheldon Ross 16 March 2013 в 12:16
поделиться

2 ответа

Вы можете вызвать частный метод с отражением. Изменение последнего бита опубликованного кода:

Method method = object.getClass().getDeclaredMethod(methodName);
method.setAccessible(true);
Object r = method.invoke(object);

Есть несколько предостережений. Во-первых, getDeclaredMethod найдет только метод, объявленный в текущем классе , не унаследованный от супертипов. Итак, при необходимости просмотрите иерархию конкретных классов. Во-вторых, SecurityManager может предотвратить использование метода setAccessible . Таким образом, возможно, потребуется запустить его как PrivilegedAction (используя AccessController или Subject ).

282
ответ дан 23 November 2019 в 23:37
поделиться

Используйте getDeclaredMethod () , чтобы получить закрытый объект Method, а затем используйте method.setAccessible () , чтобы разрешить его фактически вызвать.

33
ответ дан 23 November 2019 в 23:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: