簡體   English   中英

如何在Frege原生聲明中聲明Java枚舉?

[英]How do I declare Java enums in Frege native declarations?

在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

在本機聲明中處理此問題的建議方法是什么?

我們可以為內部類生成Frege代碼。 輸入到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模塊。 我希望在本周末之前釋放這個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM