Чтобы использовать 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
аргументами.