Как вызвать метод «put» на карте с помощью ReflectionAPI - PullRequest
0 голосов
/ 06 ноября 2019
Map map = new HashMap();
Method[] methods = map.getClass().getMethods();
Method method = map.getClass().getMethod("put");

Я вижу метод "put" в массиве методов, но я получаю NoSuchMethodException для getMethod ("put").

Почему это так и как я могу получить доступ к методу put? Мне нужно вызвать его.

1 Ответ

3 голосов
/ 06 ноября 2019

Чтобы использовать getMethod , вы должны предоставить не только имя метода, который вы хотите получить, но и типы его аргументов в виде Class<?> объектов. Поскольку вы не передали ни одного типа аргумента, он ищет метод с именем put, который не принимает аргументов, но такого метода не существует;метод HashMap.put принимает два аргумента.

Эти работы:

Method m1 = String.class.getMethod("length");
Method m2 = List.class.getMethod("get", int.class);
Method m3 = HashMap.class.getMethod("put", Object.class, Object.class);

Метод String.length не принимает аргументов, поэтому в getMethod аргументы Class<?> не требуются. С другой стороны, метод List.get принимает аргумент int, поэтому нам нужно передать int.class в качестве аргумента getMethod.

Обратите внимание, что, хотя HashMap<K,V> является универсальным классомоба типа аргументов Object, потому что K и V не являются реальными классами;это параметры типа с верхней границей Object. Следовательно, getMethod необходимо вызывать с двумя Object.class аргументами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...