У меня есть следующий фрагмент кода, и я хочу получить доступ к свойству scriptDsl
из Java
из той же кодовой базы. Я не хочу показывать scriptDsl
публично.
class ScriptDsl {
internal val scriptDsl: JScriptDsl by lazy { //... }
}
при компиляции, scriptDsl
становится public final JScriptDsl getScriptDsl$esw_ocs_dsl_kt()
, но я хочу указать здесь произвольное имя, которое возможно для не делегированных свойств, используя JvmName("scriptDsl")
. Как это сделать для internal delegated properties
?
У меня все хорошо, если есть какие-то другие лучшие решения, мои требования: «
- Я хочу позвонить
scriptDsl
из Явы в пределахтот же модуль - Я вызываю его с помощью отражения, поэтому необходимо заранее знать имя
ScriptDsl
общедоступно, и я не хочу, чтобы свойство scriptDsl
было доступно вне модуля scriptDsl
должно быть ленивым, потому что это зависит от других свойств, которые могут быть недоступны при объявлении
Примечание: я знаю, internal
в kotlin это public
в java.
Из документации kotlin:
внутренние объявления становятся открытыми в Java. Члены внутренних классов проходят через искажение имен, чтобы затруднить их случайное использование из Java иразрешить перегрузку для членов с одинаковой подписью, которые не видят друг друга в соответствии с правилами Kotlin;