У меня есть класс Dummy
, который имеет частный метод под названием sayHello
. Я хочу позвонить sayHello
снаружи Dummy
. Я думаю, что это должно быть возможно с отражением, но я получаю IllegalAccessException
. Есть идеи???Как вызвать частный метод извне класса java
ответ
использовать setAccessible(true)
на свой объект Method перед использованием его метода invoke
.
import java.lang.reflect.*;
class Dummy{
private void foo(){
System.out.println("hello foo()");
}
}
class Test{
public static void main(String[] args) throws Exception {
Dummy d = new Dummy();
Method m = Dummy.class.getDeclaredMethod("foo");
//m.invoke(d);// throws java.lang.IllegalAccessException
m.setAccessible(true);// Abracadabra
m.invoke(d);// now its OK
}
}
getMethod также выбрасывает исключение !!! –
потому что 'getMethod' возвращает только общедоступный метод, вам нужно' getDeclaredMethod' – Pshemo
, вы правы, спасибо! –
Сначала ты должен получить класс, который является довольно прямо вперед, а затем получить метод по имени, используя getDeclaredMethod
, то вам необходимо установить метод, как доступный по setAccessible
методом на Method
объекта.
Class<?> clazz = Class.forName("test.Dummy");
Method m = clazz.getDeclaredMethod("sayHello");
m.setAccessible(true);
m.invoke(new Dummy());
method = object.getClass().getDeclaredMethod(methodName);
method.setAccessible(true);
method.invoke(object);
Если вы хотите передать какой-либо параметр в частную функцию вы можете передать его в качестве второго, третьего ..... аргументов функции Invoke. Ниже приведен пример кода.
Method meth = obj.getClass().getDeclaredMethod("getMyName", String.class);
meth.setAccessible(true);
String name = (String) meth.invoke(obj, "Green Goblin");
Полного пример вы можете увидеть Here
Примера доступа к частному методу (с параметром), используя Java Reflection следующим образом:
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
class Test
{
private void call(int n) //private method
{
System.out.println("in call() n: "+ n);
}
}
public class Sample
{
public static void main(String args[]) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException
{
Class c=Class.forName("Test"); //specify class name in quotes
Object obj=c.newInstance();
//----Accessing private Method
Method m=c.getDeclaredMethod("call",new Class[]{int.class}); //getting method with parameters
m.setAccessible(true);
m.invoke(obj,7);
}
}
- 1. Python: Как вызвать метод извне класса?
- 2. Частный var доступен извне класса
- 3. Как индексировать частный вектор извне класса?
- 4. Ошибка: попытка вызвать частный метод
- 5. Любой способ вызвать частный метод?
- 6. Как вызвать частный метод на одноэлемент (стиль Enum) в java?
- 7. Как производный класс может вызвать частный метод базового класса?
- 8. Почему вы можете вызвать частный метод из-за пределов объекта?
- 9. Как вызвать метод в класс AsyncTask извне?
- 10. Как вызвать открытый метод jquery plugin извне?
- 11. Вызвать метод класса байткода, java
- 12. Как вызвать частный статический метод с использованием отражения (Java)?
- 13. Как вызвать частный метод в Gosu
- 14. метод вызова python извне класса
- 15. Java частный метод Оберточные
- 16. Как вызвать метод абстрактного класса в java
- 17. Как вызвать метод python из класса java?
- 18. Как вызвать метод фрагмента из класса java?
- 19. Как вызвать метод java для основного класса
- 20. Как вызвать метод анонимного класса в Java
- 21. Деструкторы - метод класса, определяемый извне
- 22. Как вызвать метод класса?
- 23. Как вызвать метод класса?
- 24. java - reflection: Как переопределить частный статический абстрактный метод внутреннего класса?
- 25. Как переопределить частный метод из библиотеки класса
- 26. Как проверить частный метод частного статического класса
- 27. «Попытка вызвать частный метод» с депо учебник
- 28. Как вызвать метод в java?
- 29. Как вызвать метод класса java класса codenameone из javascript?
- 30. Как вызвать метод угловой2 извне и иметь ссылку на это?
Не идея частного, что вы не можете вызвать его извне? – PriestVallon
Да, это возможно с отражением, но точка частного заключается в том, чтобы затруднить вызов методов извне. Может быть, это не будет частным? –
@robert это в той же программе (модуль) –