Каково использование сопутствующего объекта в котлине и замена в java

companion object { var funAfterPermission: (() -> Unit)? = null } 

Каково использование объекта-компаньона в приведенном выше фрагменте и каково значение строки

  var funAfterPermission: (() -> Unit)? = null 

Ваша строка означает, что существует var с именем funAfterPermission которое принимает функцию (функции высокого порядка ) как параметр, который возвращает эквивалент void в java. Он использует метод без параметров. Сам var имеет значение null по умолчанию и может быть нулевым.

 var funAfterPermission: (() -> Unit)? = null 

Пример:

 fun test(): (() -> Unit)? { println("test") return null } funAfterPermission = test() 

Это похоже на eval на нескольких языках. Он вызывает что-то в другой функции, но не присваивает ничего, поскольку он возвращает Unit.

объекты-компаньоны используются для получения «статического» поведения из java. Вы можете получить доступ к вашему funAfterPermission, используя YourClass.funAfterPermission = ....

companion object является заменой singleton в Java.

() -> Unit представляет делегата. Его можно разделить на () и Unit . () означает, что делегат не должен принимать ничего в качестве параметра. Unit означает, что делегат ничего не возвращает (то же, что и в Java). Объединение их означает, что это делегат, который не требует каких-либо параметров и ничего не возвращает.

(() -> Unit)? означает, что делегат может быть нулевым.

Например, (Int, String) -> String означает, что для первого параметра должен быть Int , вторым параметром является String и он возвращает String .

 class Foo { var greeting: () -> Unit = this::helloWorld fun helloWorld() { } fun hello() { greeting() } } 

Делегат назначается синтаксисом :: и может быть вызван как нормальная функция.