Maison >Java >javaDidacticiel >Comment appeler efficacement les fonctions Clojure depuis Java à l'aide de techniques modernes ?

Comment appeler efficacement les fonctions Clojure depuis Java à l'aide de techniques modernes ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-20 07:57:09276parcourir

How to Efficiently Call Clojure Functions from Java Using Modern Techniques?

Appeler Clojure depuis Java avec des outils modernes

Bien que certaines informations fournies dans les discussions en ligne précédentes puissent être obsolètes, appeler Clojure depuis Java reste relativement simple. Voici un guide étape par étape :

Préparation du pot Clojure :

  1. Créez un projet Clojure en utilisant Leiningen : lein new com.domain.tiny
  2. Définissez vos fonctions Clojure dans src/com/domain/tiny.clj :

    (ns com.domain.tiny)
    
    (defn binomial
      "Calculate the binomial coefficient."
      [n k]
      (let [a (inc n)]
     (loop [b 1
            c 1]
       (if (> b k)
         c
         (recur (inc b) (* (/ (- a b) b) c))))))
    
    (defn -binomial
      "A Java-callable wrapper around the 'binomial' function."
      [n k]
      (binomial n k))
    
    (defn -main []
      (println (str "(binomial 5 3): " (binomial 5 3)))
      (println (str "(binomial 10042, 111): " (binomial 10042 111))))
  3. Générez un pot à l'aide de la tâche Leiningen : lein jar
  4. Copiez le pot Clojure et votre tiny.jar généré dans un emplacement idéal

Java Code :

  1. Créez une classe Java qui appelle la fonction Clojure :

    import java.lang.reflect.Method;
    
    import com.domain.tiny;
    
    public class Main {
    
     public static void main(String[] args) {
         try {
             Method binomialMethod = Class.forName("com.domain.tiny").getMethod("binomial", int.class, int.class);
    
             Integer n = 5;
             Integer k = 3;
             Double result = (Double) binomialMethod.invoke(null, n, k);
             System.out.println("(binomial " + n + " " + k + "): " + result);
    
             n = 10042;
             k = 111;
             result = (Double) binomialMethod.invoke(null, n, k);
             System.out.println("(binomial " + n + ", " + k + "): " + result);
         } catch (Exception e) {
             System.err.println("Error calling Clojure function: " + e.getMessage());
             e.printStackTrace();
         }
     }
    }
  2. Compilez la classe Java en utilisant javac
  3. Créez un fichier manifeste (MANIFEST.MF) avec le dépendances :

    Manifest-Version: 1.0
    Class-Path: tiny.jar:clojure-x.y.z.jar
    Main-Class: Main
  4. Emballez la classe Java et les dépendances dans un pot : jar cfm Interop.jar MANIFEST.MF Main.class tiny.jar clojure-x.y.z.jar

Exécutez le programme :

  1. Assurez-vous que Clojure jar et tiny.jar sont sur le chemin de classe
  2. Exécutez le jar Java : java -jar Interop.jar

Le résultat doit être similaire à :

(binomial 5 3): 10.0
(binomial 10042, 111): 4.9068389575068143E263

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn