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
Libérer: 2024-12-20 07:57:09
original
226 Les gens l'ont consulté

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))))
    Copier après la connexion
  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();
         }
     }
    }
    Copier après la connexion
  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
    Copier après la connexion
  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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal