我一直在尝试Frege,我想做的第一件事就是实现一个 Java 接口。
这是怎么做的?
这是我在 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();
}
}
要在 Frege 中实现这一点,我需要知道:
如何声明一些在 JVM 字节码中称为
mypkg.FregeMain
implementation的类可见的东西BundleActivator
(请注意,这很重要,因为 OSGi 框架将扫描 jar 以查找实现该接口的类,并自动调用它们)。如何实现
Runnable
(可能是 Haskell lambda)并将其传递给Thread
构造函数。同样的问题:实现一个 Java 接口,但这次使用匿名类或 lambda。
我试图从 Frege 帖子中理解 Calling Java,但可能是由于我缺乏 Frege/Haskell 的经验,我只是不明白其中的大部分内容。
感谢您的任何意见。