Вызвать приватный метод с интерфейсом в качестве аргумента - PullRequest
2 голосов
/ 07 июня 2010

Я пытался вызвать закрытый метод, аргумент которого является параметром, и я не могу понять, как он выглядит правильно.

Вот как выглядит код:

public class TestClass {
   public TestClass(){
   }

   private void simpleMethod( Map<String, Integer> testMap) {
      //code logic
   }
}

Затем я пытаюсь использовать это для вызова приватного метода:

//instance I would like to invoke simpleMethod on
TestClass testClassObject = new TestClass();

//Hashmap
Map <String, Integer> testMap = new HashMap <String, Integer>();

//method I want to invoke
Method simpleMethod = TestClass.class.getDeclaredMethod("simpleMethod", Map.class);
simpleMethod.setAccessible(true);

simpleMethod.invoke(testClassObject, testMap); //Throws an IllegalArgumentException 

Как видите, он вызывает исключение IllegalArgumentException. Я пытался вернуть хэш-карту обратно на карту, но это не сработало.

Что я делаю не так?

Ответы [ 3 ]

3 голосов
/ 07 июня 2010

Я только что протестировал его, и ваш код работает на 100% здесь, когда я создаю экземпляр вашего объекта TestClass, например:

TestClass testClassObject = new TestClass();

Может быть, вы используете другой импорт (например, карту отличается от java.util.Map)?

1 голос
/ 08 июня 2010

Код, как опубликовано, прекрасно работает для меня. Немного подправив код, я получаю исключение IllegalArgumentException, когда testMap имеет значение null. "неверное количество аргументов".

1 голос
/ 07 июня 2010

Все работает так, как ожидалось, и выдает «простой метод вызван».

TestClass.java

import java.util.Map;

public class TestClass {
    public TestClass() {
    }
    private void simpleMethod(Map<String, Integer> testMap) {
        System.err.println("simpleMethod invoked");
    }
}

Caller.java

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

public class Caller {
    public static void main(String[] args) throws IllegalArgumentException,
            IllegalAccessException, InvocationTargetException,
            SecurityException, NoSuchMethodException {
        // Hashmap
        Map<String, Integer> testMap = new HashMap<String, Integer>();

        // method I want to invoke
        Method simpleMethod = TestClass.class.getDeclaredMethod("simpleMethod",
                Map.class);
        simpleMethod.setAccessible(true);

        TestClass testClassObject = new TestClass();
        simpleMethod.invoke(testClassObject, testMap);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...