Implémentez l'interface Java dans la classe JRuby et appelez-la depuis Java

Je voulais écrire une interface graphique en Java et un traitement en Ruby, j'ai donc dû gérer les classes Ruby et Java mutuellement, alors notez

$ tree
.
├── out
│   └── production
│       └── JRubyTest
│           └── JrubyTest
│               ├── Main.class
│               └── TestInterface.class
├── ruby
│   ├── TestInterface.jar
│   └── test_class.rb
└── src
    └── JrubyTest
        ├── Main.java
        └── TestInterface.java

TestInterface.java


package JrubyTest;

public interface TestInterface {
    java.lang.String hello();
}

TestClass.rb


java_import 'JrubyTest.TestInterface'

class TestClass
  include TestInterface
  def initialize name
    @name = name
  end

  def hello
    "hello #{@name}"
  end
end

Main.java


package JrubyTest;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptContext;
import javax.script.ScriptException;

public class Main {
    public static void main(String[] args) {
        ScriptEngineManager m = new ScriptEngineManager();
        ScriptEngine rubyEngine = m.getEngineByName("jruby");
        ScriptContext context = rubyEngine.getContext();
        try {
            File file = new File("ruby/test_class.rb");
            try {
                FileReader reader = new FileReader(file);
                rubyEngine.eval(reader);
                String name = "'Taro'";
                Object testClass = rubyEngine.eval("TestClass.new " + name, context);
                if (testClass instanceof TestInterface){
                    TestInterface test = (TestInterface) testClass;
                    System.out.println(test.hello());
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }

        } catch (ScriptException e) {
            e.printStackTrace();
        }
    }
}

Recommended Posts

Implémentez l'interface Java dans la classe JRuby et appelez-la depuis Java
Ecrire une classe en Kotlin et l'appeler en Java
Appeler Java depuis JRuby
Appel de méthode Java depuis RPG (appel de méthode dans sa propre classe)
Utilisation correcte de la classe abstraite et de l'interface en Java
Appeler la classe scellée de Kotlin depuis Java
Classe StringBuffer et StringBuilder en Java
[Kotlin] Obtenez le constructeur / la méthode Java de KFunction et appelez-le
Appel de méthodes Java à partir de JavaScript exécutées en Java
Gradle génère automatiquement le numéro de version de git et l'utilise en Java
GetInstance () à partir d'une classe @Singleton dans Groovy à partir de Java
Comment obtenir une classe depuis Element en Java
Capture et sauvegarde de l'installation de sélénium en Java
Générer OffsetDateTime à partir de Clock et LocalDateTime en Java
Interface appelable en Java
abstract (classe abstraite) et interface (interface)
Soustraire les constantes Enum des chaînes et des valeurs en Java
Appeler un programme écrit en Swift depuis Processing (Java)
[Développement Android] Obtenez des images du serveur avec Java et définissez-les dans ImageView! !!
[Java] Précautions lors du référencement dans une classe parent et de l'instanciation dans une classe enfant
Trouvez la classe d'adresse et le type d'adresse à partir de l'adresse IP avec Java
JSON en Java et Jackson Partie 1 Renvoyer JSON à partir du serveur
Implémentation de l'authentification en deux étapes en Java
Définition et instanciation de classe Java
Implémenter l'authentification de base en Java
Comment appeler et utiliser l'API en Java (Spring Boot)
Implémenter une combinaison de mathématiques en Java
2 Implémentez une analyse syntaxique simple en Java
Corrigez le code de caractère en Java et lisez à partir de l'URL
Implémenter l'envoi d'e-mails en Java
Obtenir des attributs et des valeurs à partir d'un fichier XML en Java
Implémenter un tri rapide de type fonction en Java
Implémentez rm -rf en Java.
Implémenter la signature XML en Java
Installez le plugin memcached sur MySQL et accédez à partir de Java
Mécanisme et caractéristiques de la classe d'implémentation Collection souvent utilisés en Java
Implémenter un test piloté par table dans Java 14
Différence entre interface et classe abstraite
Chaîne d'appels depuis la chaîne dans l'intégration Spring
Obtenir TypeElement et TypeMirror à partir de la classe
3 Implémentez un interpréteur simple en Java
Exemple d'encodage et de décodage en Java
[Java débutant] À propos de l'abstraction et de l'interface
Implémenter reCAPTCHA v3 dans Java / Spring
Implémenter la fonction PHP implode en Java
[JAVA] Différence entre abstrait et interface
Java, interface pour partir du débutant
Comprendre equals et hashCode en Java
Essayez d'implémenter Yuma en Java
1 Implémentez une analyse de phrase simple en Java
Appelez l'API Java de TensorFlow depuis Scala
Bonjour tout le monde en Java et Gradle
Appelez la super méthode en Java
[Java] Obtenir et gérer Json à partir d'une URL avec une API standard (javax.script)
Ajoutez une bibliothèque jar pré-construite à Android et appelez-la dans le cadre
J'ai écrit une fonction Lambda en Java et l'ai déployée avec SAM
J'ai créé une classe qui peut utiliser JUMAN et KNP de Java
Lors de l'appel de println etc. à partir d'un fichier de classe Java externe en traitement
Java --Introduire le plug-in CheckStyle dans IntelliJ IDEA et le refléter dans le formateur
[Java] Implémenter une fonction qui utilise une classe implémentée dans le modèle Builder
Étudiez le Deep Learning à partir de zéro en Java.