Исправление NoSuchMethodException с помощью Kotlin Reflection в частных функциях ⇐ JAVA
Исправление NoSuchMethodException с помощью Kotlin Reflection в частных функциях
Я пытаюсь вызвать частную функцию Kotlin, которая принимает примитивное целое число и строку в качестве параметров, используя отражение, но сталкиваюсь с исключением NoSuchMethodException. Ниже приведен код класса, содержащего частную функцию и тестовую функцию, которую я пытаюсь вызвать:
класс DataKey { личное развлечение test22(num: Int, str: String): Int { // Реализация функции вернуть 1 } } Вот тестовая функция, в которой я пытаюсь вызвать test22:
класс DataKeyTest { частный вал dataKey = DataKey() @Тест весело `INITK test`() = runBlocking { val result = UnitTestReflectionHelper.invokePrivate(dataKey, «test22», 1, «Hello») как Int Assert.assertEquals(результат, 1) } } Класс UnitTestReflectionHelper определяется следующим образом:
класс UnitTestReflectionHelper { сопутствующий объект { inline fun ignorePrivate(экземпляр: T, имя метода: String, параметры vararg: Любой?): Любой? { val метод = T::class.java.getDeclaredMethod(methodName, *params.map { it?.javaClass }.toTypedArray()) метод.isAccessible = правда return метод.invoke(экземпляр, *params) } } } Когда я запускаю тест, я получаю следующую ошибку:
java.lang.NoSuchMethodException: co.service.provider.DataMada.test22(java.lang.String, java.lang.Integer)
Похоже, что проблема связана с тем, как Kotlin автоматически упаковывает примитивные типы и как отражение Java требует явного сопоставления типов. Как я могу изменить свой метод ignorePrivate, чтобы он обрабатывал это несоответствие типов и правильно вызывал метод test22?
Я пытаюсь вызвать частную функцию Kotlin, которая принимает примитивное целое число и строку в качестве параметров, используя отражение, но сталкиваюсь с исключением NoSuchMethodException. Ниже приведен код класса, содержащего частную функцию и тестовую функцию, которую я пытаюсь вызвать:
класс DataKey { личное развлечение test22(num: Int, str: String): Int { // Реализация функции вернуть 1 } } Вот тестовая функция, в которой я пытаюсь вызвать test22:
класс DataKeyTest { частный вал dataKey = DataKey() @Тест весело `INITK test`() = runBlocking { val result = UnitTestReflectionHelper.invokePrivate(dataKey, «test22», 1, «Hello») как Int Assert.assertEquals(результат, 1) } } Класс UnitTestReflectionHelper определяется следующим образом:
класс UnitTestReflectionHelper { сопутствующий объект { inline fun ignorePrivate(экземпляр: T, имя метода: String, параметры vararg: Любой?): Любой? { val метод = T::class.java.getDeclaredMethod(methodName, *params.map { it?.javaClass }.toTypedArray()) метод.isAccessible = правда return метод.invoke(экземпляр, *params) } } } Когда я запускаю тест, я получаю следующую ошибку:
java.lang.NoSuchMethodException: co.service.provider.DataMada.test22(java.lang.String, java.lang.Integer)
Похоже, что проблема связана с тем, как Kotlin автоматически упаковывает примитивные типы и как отражение Java требует явного сопоставления типов. Как я могу изменить свой метод ignorePrivate, чтобы он обрабатывал это несоответствие типов и правильно вызывал метод test22?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Reflection.typeinfo/Reflection.Type не имеет метода GetProperties/GetFields
Anonymous » » в форуме C# - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-