Skip to content Skip to sidebar Skip to footer

Kotlin Call Java Platform Types Result In Llegalstateexception

I'm using kotlin in one of my Android classes and it seems like an IllegalStateException sometimes pops up on this line, when trying to get an extra from a Bundle. keyOrTag = bundl

Solution 1:

Okay I believe I know why that happens. Posting it as an answer so that others with a related issue could see.

The String "tag" added to the bundle can actually be null in the Java class that sends it over to the Kotlin one. And since I didn't declare the val as nullable I believe that's why it's throwing an IllegalStateException (yup, no NPE in kotlin).

The fix:

val keyOrTag: String?

Solution 2:

When this error occurs?

The IllegalStateException was thrown by Kotlin kotlin.jvm.internal.Intrinsics possibly when you calling Java platform types.

Why did you can't see the stackTrace of an Exception throws by kotlin.jvm.internal.Intrinsics from Kotlin?

This is because the stackTrace is removed by Kotlin in Intrinsics#sanitizeStackTrace method internally:

privatestatic <T extendsThrowable> T sanitizeStackTrace(T throwable) {
    return sanitizeStackTrace(throwable, Intrinsics.class.getName());
}

Example

Here is a Java platform type StringUtils source code, and the toNull method will return null if the parameter value is null or "".

publicclassStringUtils {
    publicstaticStringtoNull(String value) {
        return value == null || value.isEmpty() ? null : value;
    }
}

Then you try to assign the result of the method call to a non-nullable variable possibly throws an IllegalStateException, for example:

val value: String = StringUtils.toNull("")
//         ^//throws IllegalStateException: StringUtils.toNull("") must not be null//try to assign a `null` from `toNull("")` to the non-nullable variable `value`

How to avoiding such Exception throws by kotlin.jvm.internal.Intrinsics?

IF you are not sure that the return value whether is null or not from Java platform types, you should assign the value to a nullable variable/make the return type nullable, for example:

val value: String? = StringUtils.toNull("")
//         ^--- it works fine   

Post a Comment for "Kotlin Call Java Platform Types Result In Llegalstateexception"