Java: NoSuchMethodException, даже если метод существует - PullRequest
0 голосов
/ 24 марта 2020

Итак, у меня есть класс с 2 определенными c методами. Когда я вызываю getDeclaredMethods, тогда l oop поверх результатов, печатаются имена, оба корректно отображаются. Так что не только метод существует, но и вызов рефлексии находит его.

Но когда я пытаюсь вызвать метод, как показано в коде ниже, я получаю NoSuchMethodException. Так почему же он не может найти его при вызове?

public class Foo
{
  public byte[] read_status(Object arg)
  {
    byte[] test = new byte[10];
    for(int i = 0; i < 10; i++)
    {
      test[i] = (byte)i;
    }
    return test;
  }

  public int test(String s) throws Exception
  {
    Object r = this.getClass().getDeclaredMethod("read_status").invoke(this, (Object)s);
    byte[] bytes = (bytes[])r;
    for(int i = 0; i < bytes.length; i++)
    {
      System.out.println(""+bytes[i]);
    }
    return 0;
  }
}

1 Ответ

4 голосов
/ 24 марта 2020

Вы должны указать параметры типа методов, ваш код должен выглядеть так:

public int test(String s) throws Exception {
    Object r = this.getClass().getDeclaredMethod("read_status", Object.class).invoke(this, (Object)s);
    byte[] bytes = (byte[])r;
    for(int i = 0; i < bytes.length; i++) {
      System.out.println(""+bytes[i]);
    }
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...