Всем привет! Подскажите пожалуйста, как вызвать p...
# russian
a
Всем привет! Подскажите пожалуйста, как вызвать private fun isFun(ok: String): Boolean из другого класса при помощи рефлексии.
g
должно быть тоже самое как любой другой приватный метод, найти рефлексией в классе, выставить setAccesible(true) и вызвать после этого через method.invoke
a
Вроде как да Вот два варианта и оба не работают: 1) val met = NewsServiceImpl() val f = NewsServiceImpl::class.functions.find { it.name == "statusIsNotValid" } f?.let { it.isAccessible = true it.call("draft") } 2) val method = NewsServiceImpl().let { it.javaClass .getDeclaredMethod("statusIsNotValid") .apply { isAccessible = true } .invoke(it, "draft") }
g
что конкретно не работает?
и точно метод statusIsNotValid объявлен в NewsServiceImpl, а не в одном из его пэрентов
a
Объявлен в NewsServiceImpl. Не вызывается падает с exception, в первом случае "Callable expects 2 arguments, but were 1 provided" и не пойму, что я должен еще туда передать, если на входе только стринг. Во втором случае просто не видит метода NoSuchMethodException.
метод private
g
аааа
я понял почему во втором случае не работает
getDeclaredMethod имеет же доп аргмент vararg
там нужно типы параметров передавать
короче если хочется просто по имени, то только искать в массиве getDeclaredMethods()
a
Да!
g
В данном случае нужно что-то типо
Copy code
.getDeclaredMethod("statusIsNotValid", String::class.java)
a
Заработало, спасибо!)
l
в первом варианте call() вроде должен первым параметром принмать объект, на котором будет вызываться метод, потом парамерты
👍 1
так же как
.invoke(it, "draft")