Kotlin : Intéropérabilité avec Java

Temps : 55 min.
Diffiulté : ***

L'objectif est de tester l'intéropérabilité entre Java et Kotlin :

  1. De Kotlin à Java
  2. Extension de fonction à partir du Java
  3. De Java à Kotlin

1. De Kotlin à Java

Il s'agit de créer une classe de donnée Kotlin puis une classe Java, de façon à tester le Kotlin dans le Java.

  1. Dans le package agua, créez un nouveau package java.
  2. Dans le package agua.java, créez une nouvelle classe Kotlin, Palm :
  3.   
      data class Palm(val height: Int = 20, val stem: Int = 5)
      
      
  4. créez une nouvelle classe Java Beach avec la fonction main() :
  5.   
      public static void main(String args[])  //static method
      {
          Palm palm = new Palm();
          System.out.println("/!\\JAVA Palm: " + palm.toString());
      }
      
      
  6. Exécutez votre programme
  7. Dans la classe Palm, créez une fonction simple :
  8.   
      fun dim() = height * stem * 3
      
      
  9. Testez là dans le main de la classe Java (sout pour générer System.out.println() :
  10.   
      System.out.println(palm.dim());
      
      
  11. Exécutez votre programme Java
  12. Dans la classe Palm, créez des fonctions d'impression :
  13.   
      fun printPalm(): Unit {
          printStem()
          printTrunk()
      }
    
      fun printStem() {
          println("   |  ")
          println(")  | (")
          println(" ) | (")
          println("  ) (")
      }
    
      fun printTrunk(height: Int = 7) {
          repeat(height) {
              println("  | | ")
          }
          println("  _-_")
      }
      
      
  14. Testez là dans le main de la classe Java :
  15.   
      printPalm();
      
      
  16. IntelliJ propose d'importer :
  17.   
      import static agua.java.PalmKt.printPalm;
      
      
  18. Dans la classe Palm, rendez la fonction d'impression statique et ajoutez les annotations :
  19.   
      companion object {
        @JvmStatic
        fun printPalm(): Unit {
            printStem()
            printTrunk()
        }
      }
      
      
  20. L'import, dans la classe Java, devient :
  21.   
      import static agua.java.Palm.printPalm;
      
      

2. Extension de fonction à partir du Java

Il s'agit de créer une fonction d'extension Kotlin puis de l'utiliser dans du code Java.

  1. Dans le package agua.java, créez un nouveau fichier Kotlin, FunExtension
  2. dans ce fichier FunExtension, déclarez une fonction d'extension pour la classe String :
  3.   
      fun String.sayHello() = print("This variable contains: $this")
      
      
  4. Testez là dans le main de la classe Java :
  5.   
      FunExtensionKt.sayHello(message);
      
      
  6. Exécutez votre programme Java
  7. Dans FunExtension, ajoutez l'annotation de nom de fichier :
  8.   
      @file: JvmName("KotlinExt")
      package agua.java
      
      
  9. Modifiez en conséquence dans le main de la classe Java :
  10.   
      KotlinExt.sayHello(message);
      
      
  11. Exécutez le programme Java

3. De Java à Kotlin

  1. Dans le package agua.java, créez un nouveau fichier Kotlin, JavaCodeConversion
  2. dans ce fichier JavaCodeConversion, copiez, collez cet extrait de code :
  3.   
      class Application1 {
       static void main(String[ ] args)
       { /* inverse d'une suite de caractère dans un tableau par
           permutation des deux extrêmes */
        char [ ] Tablecar ={'a','b','c','d','e','f'} ;
        int i, j ;
        System.out.println("tableau avant : " + String.valueOf(Tablecar));
        for ( i = 0 , j = 5 ;  i<j ; i++ , j-- )
         { char car ;
           car = Tablecar[i];
           Tablecar[i ]= Tablecar[j];
           Tablecar[j] = car;
         }
        System.out.println("tableau après : " + String.valueOf(Tablecar));
      }
    }
      
      
  4. Remarquez la conversion automatique

Finalement, il est possible d'appeller du code Kotlin dans du code Java, notamment via les annotations :

Références

GeeksforGeeks : Java Interoperability – Calling Kotlin from Java
OpenClassRooms : Les extensions