kotlin: extension methods and null receiver

You can call it on a nullable object if you define it to be an extension on a nullable type:

fun Any?.stringOrNull() = ...

Otherwise, like with any other method, you'd have to use the safe call operator.

You can create extensions on nullable receiver types. In your example, it has to be Any? instead of Any which would not allow null, see the docs:

Nullable Receiver

Note that extensions can be defined with a nullable receiver type. Such extensions can be called on an object variable even if its value is null, and can check for this == null inside the body. This is what allows you to call toString() in Kotlin without checking for null: the check happens inside the extension function.

fun Any?.toString(): String {
    if (this == null) return "null"
    // after the null check, 'this' is autocast to a non-null type, so the toString() below
    // resolves to the member function of the Any class
    return toString()