如何在Java原生声明中声明Java枚举



当在JavaFX动画类上使用Frege本机生成工具时,它生成的Frege代码包括以下内容:

data Animation = mutable native javafx.animation.Animation where
  native getRate   :: Animation -> IO Double
  native getStatus :: Animation -> IO Animation_Status

,但是由于缺少Animation_Status类型,代码无法编译。在Java端,这是一个枚举。http://docs.oracle.com/javafx/2/api/javafx/animation/Animation.Status.html

在本机声明中处理这个问题的建议方法是什么?

我们可以为内部类生成Frege代码。输入到本机生成工具的类名是Class.getName返回的名称。对于Animation.Status,取值为javafx.animation.Animation$Status

$ java -jar native-gen-1.0-SNAPSHOT.jar 
Enter class name: javafx.animation.Animation$Status
data Animation_Status = pure native javafx.animation.Animation.Status where
  pure native paused "javafx.animation.Animation.Status.PAUSED" :: Animation_Status
  pure native running "javafx.animation.Animation.Status.RUNNING" :: Animation_Status
  pure native stopped "javafx.animation.Animation.Status.STOPPED" :: Animation_Status
  pure native valueOf "javafx.animation.Animation.Status.valueOf" :: String -> Animation_Status
  native values "javafx.animation.Animation.Status.values" :: () -> STMutable s (JArray Animation_Status)
derive Serializable Animation_Status
顺便说一下,我目前正在研究的native-gen版本可以为整个Java包及其子包递归地生成Frege代码。我们可以只给根包javafx,它就会为所有子包中的所有类创建Frege模块。我希望能在本周末发布这个

最新更新