3

在 JavaFX Animation 类上使用 Frege native-gen 工具时,它会生成 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

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

4

1 回答 1

3

我们可以为内部类生成弗雷格代码。输入到 native-gen 工具的类名是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 模块。我希望在本周末之前发布这个。

于 2015-08-18T14:28:54.850 回答