NoSuchMethodError: java.lang.Long.hashCode

I have the following method override on hashCodein class AbstractORM:

var _id = Random().nextLong()

override fun getId() = _id // AbstractORM class implements an interface that defines this method getId()

override fun hashCode() = getId().hashCode()

who unexpectedly started throwing the following exception:

FATAL EXCEPTION: main
java.lang.NoSuchMethodError: java.lang.Long.hashCode
   at com.company.ormlite.AbstractORM.hashCode(AbstractORM.kt:271)
   at java.util.HashMap.put(HashMap.java:390)
   at java.util.HashSet.add(HashSet.java:95)
   at kotlin.collections.ArraysKt___ArraysKt.toCollection(_Arrays.kt:6518)
   at kotlin.collections.ArraysKt___ArraysKt.toSet(_Arrays.kt:6853)
   at kotlin.collections.SetsKt__SetsKt.setOf(Sets.kt:32)
   at com.company.android.tna.orm.DataManager.getTables(DataManager.kt:16)
   at com.company.android.tna.orm.DataManager.getTables(DataManager.kt:10)
   at com.company.android.core.utils.AbstractDataManager.create(AbstractDataManager.kt:25)
   at com.company.android.core.utils.AbstractDataManager.start(AbstractDataManager.kt:44)
   at com.company.android.core.utils.AbstractZKApplication.onCreate(AbstractZKApplication.kt:54)
   at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:999)
   at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4151)
   at android.app.ActivityThread.access$1300(ActivityThread.java:130)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1255)
   at android.os.Handler.dispatchMessage(Handler.java:99)
   at android.os.Looper.loop(Looper.java:137)
   at android.app.ActivityThread.main(ActivityThread.java:4745)
   at java.lang.reflect.Method.invokeNative(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:511)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
   at dalvik.system.NativeStart.main(Native Method)

This stunned me for several reasons:

  • All classes in Java and Kotlin have a method hashCode, since it inherits from Objector Any.
  • How can he not find a method that is on the Android SDK? If the SDK is missing, how does it work at all?
  • When checking this line of code in IntelliJ IDEA, it sends me to kotlin.Any.hashCode, not to java.lang.Long.hashcode.

Any ideas would be greatly appreciated, thanks in advance.

+16
source share
3 answers

AbstractORM : Kotlin

getId().hashCode()

Kotlin 1.1.2 :

Long.valueOf(this.getId()).hashCode()

Kotlin :

Long.hashCode(this.getId())

, Long.hashCode(long) Android API 24 (Android 7.0), Android 4.1 (API 16).

, - , .

override fun hashCode() = (getId() xor getId().ushr(32)).toInt()

, Java 1.6 Kotlin .

enter image description here

PS: 100% Kotlin, , .

+16

hashCode(), m0skit0, . :

override fun hashCode() : Int = id.toString().hashCode()

Kotlin AndroidStudio:

  • JVM . 1,6
+3

, , , .

Java 8 Long:

public static int hashCode(long value)

hashCode() :

public int hashCode() {
    return hashCode(this.value); // call Long.hashCode() static method
}

, Java.

+2
source

Source: https://habr.com/ru/post/1684664/


All Articles