Ich habe Frege ausprobiert und eines der ersten Dinge, die ich tun möchte, ist eine Java-Schnittstelle zu implementieren.Wie implementiert man Java-Schnittstellen in Frege?
Wie wird das gemacht?
Hier ist mein Beispiel in Java:
package mypkg;
import frege.repl.FregeRepl;
import frege.runtime.Concurrent;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class FregeMain implements BundleActivator {
public FregeMain() {
}
@Override
public void start(BundleContext context) throws Exception {
System.out.println("Frege Bundle activated");
new Thread(() -> FregeRepl.main(new String[ 0 ])).start();
}
@Override
public void stop(BundleContext context) throws Exception {
System.out.println("Frege stopping. Goodbye!");
Concurrent.shutDownIfExists();
}
}
dies in Frege zu implementieren, würde ich wissen müssen:
, wie etwas zu erklären, das sichtbar ist, wird als eine Klasse
mypkg.FregeMain
genannt UmsetzungBundleActivator
im JVM-Bytecode (beachten Sie, dass dies wichtig ist, da das OSGi-Framework das JAR nach Klassen durchsucht, die diese Schnittstelle implementieren, und sie automatisch aufruft).Wie implementiert man eine
Runnable
(als Haskell Lambda, wahrscheinlich) und übergeben Sie es an dieThread
Konstruktor. Auch dasselbe Problem: Implementieren Sie eine Java-Schnittstelle, aber diesmal mit einer anonymen Klasse oder Lambda.
Ich versuchte, die Calling Java from Frege Post zu verstehen, aber wahrscheinlich aufgrund meiner mangelnden Erfahrung in Frege/Haskell, ich verstehe einfach nicht, das meiste davon.
Danke für jede Eingabe.
Warum würden Sie das tun? Ihr Java-Code ist kurz und wahrscheinlich richtig? – Ingo
Ich würde das nicht tun. Ich möchte nur lernen. – Renato
Ich verstehe. Es ist so, dass das Konzept der "Schnittstelle" nicht wirklich Teil von Frege ist. Daher sollte der obige Code in Ordnung sein. Da es etwas sehr Java-spezifisch ist, ist es in Ordnung, wenn es in Java ist. – Ingo