Explicar el código Java generado el uso del método de @JvmOverloads Kotlin

votos
0

He intentado utilizar @JvmOverloads a métodos sobrecargados creados para la función Kotlin. Sólo por curiosidad he intentado mirar el código de bytes y decompilados código Java. Sin embargo, no podía tener mucho sentido del código Java.

En este caso, es un simple código Kotlin

class MyClass {

        @JvmOverloads
        fun doSomething(a : Int = 200, b : Int = 300){

        }
    }

A continuación se muestra el código java descompilada:

public final class MyClass {
   @JvmOverloads
   public final void doSomething(int a, int b) {
   }

   // $FF: synthetic method
   // $FF: bridge method
   @JvmOverloads
   public static void doSomething$default(MyClass var0, int var1, int var2, int var3, Object var4) {
      if((var3 & 1) != 0) { // What does this do ?
         var1 = 200;
      }

      if((var3 & 2) != 0) { //Where did var3 come from ? 
         var2 = 300;
      }

      var0.doSomething(var1, var2);
   }

   @JvmOverloads
   public final void doSomething(int a) {
      doSomething$default(this, a, 0, 2, (Object)null);
   }

   @JvmOverloads
   public final void doSomething() {
      doSomething$default(this, 0, 0, 3, (Object)null);
   }
}

Por favor, explique o que me señale los recursos adecuados que podrían ayudar a aprender más sobre el mismo. Gracias.

Publicado el 19/09/2018 a las 17:15
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
2

var3es una máscara de bits que indica que necesitan ser sustituidos por valores predeterminados parámetros. Si el bit 0 se establece, el primer parámetro ( var1o aen el código fuente) está sustituido con el valor predeterminado 200. Si el bit 1 se fija, var2toma el valor predeterminado 300. La sobrecarga de 1-parámetro pasa 2 como la máscara de bits (por lo solamente el bit 1 se fija), y la sobrecarga 0-parámetro pasa 3 (bits 0 y 1 están SET).

Respondida el 19/09/2018 a las 17:46
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more