Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 静态最终字段不应为空';T_Java_Android_Kotlin_Interop_Auto Value - Fatal编程技术网

Java 静态最终字段不应为空';T

Java 静态最终字段不应为空';T,java,android,kotlin,interop,auto-value,Java,Android,Kotlin,Interop,Auto Value,我们的应用程序中有一些代码使用Java,另一些代码使用Kotlin。我们遇到了一个非常奇怪的情况 问题出现在一些设备上,在将其传递给AutoValue\u会话构造函数时,尽管我们检查lastform是否为null并提供常量platform,但它报告platform为null。缺少否则: Caused by java.lang.NullPointerException: Null lastPlatform x.x.x.x.AutoValue_Session.(SourceFile:27) x.x.

我们的应用程序中有一些代码使用Java,另一些代码使用Kotlin。我们遇到了一个非常奇怪的情况

问题出现在一些设备上,在将其传递给
AutoValue\u会话
构造函数时,尽管我们检查
lastform
是否为
null
并提供常量
platform,但它报告
platform
null
。缺少
否则:

Caused by java.lang.NullPointerException: Null lastPlatform
x.x.x.x.AutoValue_Session.(SourceFile:27)
x.x.x.x.Session.from(SourceFile:28) // from that calls the child constructor
x.x.x.x.Session.(SourceFile:22) // whereNONE_FOUND is defined
x.x.x.x.Session.from(SourceFile:32) // entry point
[...]
有人对Android和Kotlin interop有过这个问题吗

更新:这种情况发生在野外,只有很少的用户。还不能在本地复制它

更新2:
会话的第二次调用。from
是由
会话的
第一次加载到内存中引起的

下面是提到的两个类的代码:

Platform.kt

sealed class Platform {

    abstract val name : String

    sealed class Local : Platform() {

        object Default : Local() {
            override val name: String = "android"
        }

        object Amazon : Local() {
            override val name: String = "android-amazon"
        }
    }

    object Missing : Platform() {
        override val name: String = "missing"
    }

    data class Remote(override val name: String) : Platform()

    companion object {
        @JvmName("from")
        @JvmStatic
        operator fun invoke(name: String?): Platform = when (name) {
            Local.Default.name -> Local.Default
            Local.Amazon.name -> Local.Amazon
            Missing.name -> Missing
            null -> Missing
            else -> Remote(name)
        }

        @JvmField
        val LOCAL : Platform = if (BuildConfig.amazon) Local.Amazon else Local.Generic

        @JvmField
        val MISSING : Platform = Missing
    }
}
Session.java

@AutoValue
public abstract class Session implements Serializable {

    public static final Session NONE_FOUND = from(0, new DateTime(0), Platform.MISSING);

    public static Session from(String id, @Nullable Platform lastPlatform) {
        Platform platform = lastPlatform == null ? Platform.MISSING : lastPlatform;
        return new AutoValue_Session(id, platform);
    }

    public static Session from(RemoteSession remote) {
        return from(
                remote.id(),
                remote.lastPlatform()
        );
    }

    public abstract String id();

    public abstract Platform lastPlatform();

}

(1) 您确定在异常发生之前,
AutoValue\u会话
构造函数不能将
lastPlatform
设置为
null
?(2) 在构造函数调用中,参数名为
platform
,在异常
lastPlatform
中。您确定这些参数与同一参数相关吗?(3) 如果出现异常,您是否查看了生成的字节码?@MichaelButscher:(1)默认情况下,Autovalue会检查值是否为null:(2)会话
中定义的属性名为
lastPlatform()
(3)我们在生成的代码上看不到任何异常。此外,忘了提到它只适用于我们的一小部分用户群,并且我们不能在本地复制它:(我找不到用于NONE_FOUND的from(int,DateTime,Platform)的任何定义。这会导致问题吗?