コールバックを保持する変数があり、デフォルトではその値はnullでなければなりません。しかし、この構文は機能していないようです。
var callback1 : () -> Unit = null
var callback2 : ((a) -> c, b) -> Unit = null
現在の解決策は、コールバックにデフォルトの実装があることを確認することです。
var callback1 : () -> Unit = { }
var callback2 : ((a) -> c, b) -> Unit = { a, b -> }
ただし、これにより、コールバックが設定されているかどうかを確認することが困難になり、デフォルトの実装にコストがかかる可能性があります(そうですか?)。 Kotlinの関数型変数にnull値を割り当てる方法は?
Kotlinのすべての変数と同様に、関数参照は通常nullにできません。 null値を許可するには、次のように、型定義の最後に?
を追加する必要があります。
var callback1 : (() -> Unit)? = null
var callback2 : (((a) -> c, b) -> Unit)? = null
通常、関数型宣言全体を括弧で囲む必要があります。必要ない場合でも、それはおそらく良い考えです。また、ヌルセーフ演算子でinvoke
を使用して関数を呼び出す必要があります。
callback1?.invoke()
何もしない実装のアプローチは、おそらく長期的にはより便利であり、私にはもう少し「コトリン」のように思えます。コンピューターサイエンスのほとんどのことと同様に、問題であることを示す特定のパフォーマンスデータがない限り、既定の実装のパフォーマンスコストについて心配する必要はありません。
Null値を許可せずにコールバックが設定されているかどうかを判断する1つの方法は、 nullオブジェクトパターン を使用することです。
val UNSET_CALLBACK1: () -> Unit = {}
var callback1 : () -> Unit = UNSET_CALLBACK1
fun callback1IsSet(): Boolean {
return callback1 !== UNSET_CALLBACK1
}
お役に立てれば!