Как вызвать метод с модификатором доступа private вне класса, в котором находится этот метод?

Рейтинг: 0Ответов: 1Опубликовано: 17.02.2023

У меня есть класс Test

import android.graphics.Region

class Test {
    private val mRegionInScreen = Region()

    private fun setRegionInScreen(region: Region) {
        mRegionInScreen.set(region)
    }
}

Мне нужно вызвать метод setRegionInScreen вне класса Test

Я пытался сделать это с помощью следующего кода

val test = Test()
val method = Test::class.java.getMethod("setRegionInScreen", Region::class.javaPrimitiveType)
method.invoke(test, Region(0, 0, 500, 500))

Но этот код выдает ошибку java.lang.NoSuchMethodException: parameter type is null

Как мне вызвать метод setRegionInScreen вне класса Test?

Ответы

▲ 1Принят

Немного по-другому надо.

val test = Test()
val method = Test::class.java.getDeclaredMethod("setRegionInScreen", Region::class.java)
method.isAccessible = true
method.invoke(test, Region(0, 0, 500, 500))

Метод getMethod() ищет только публичные методы. https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getMethod-java.lang.String-java.lang.Class...-

Returns a Method object that reflects the specified public member method of the class or interface represented by this Class object.