java - 如何在Frege中使用类型变量声明本机接口?

我想在Frege中本地声明具有通用类型的Java接口。例如,让我们从JavaFX获取一个ObservableList。

省略通用类型E,它可以定义

data ObservableList = mutable native javafx.collections.ObservableList where


但是当我尝试

data ObservableList e = mutable native javafx.collections.ObservableList where
     native addAll  ::  ObservableList e -> MutableIO (JArray e) -> IO Bool


查看完整示例here

我懂了

kind error, type constructor `ObservableList` has kind ?->generic, expected was *


建议的处理方式是什么?

最佳答案

这很有趣,因为它对我来说开箱即用:

ingo@freguntu:~/Frege/frege$ java -jar ../eclipse-plugin/lib/fregec.jar -version
3.23.247-gd535935
runtime 0.064 wallclock seconds.
ingo@freguntu:~/Frege/frege$ cat frege/StackOverflow.fr 
package StackOverflow where

data ObservableList e = mutable native javafx.collections.ObservableList where
  native addAll  ::  ObservableList e -> MutableIO (JArray e) -> IO Bool

ingo@freguntu:~/Frege/frege$ java -jar ../eclipse-plugin/lib/fregec.jar -d /tmp frege/StackOverflow.fr 
calling: javac -cp ../eclipse-plugin/lib/fregec.jar:/tmp -d /tmp -sourcepath . -encoding UTF-8 /tmp/StackOverflow.java 
Note: /tmp/StackOverflow.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
runtime 1.897 wallclock seconds.
ingo@freguntu:~/Frege/frege$ 


可以肯定的是,Java编译器抱怨Frege发出的非通用代码,但是再次进行类型检查没有任何意义,只是较弱:)

请尝试使用最后一个eclipse插件随附的fregec,它应该可以工作。

另外,在月食时,请确保您不会被错误标记所迷惑。例如,保存时,错误会变得很棘手,并且不重新编译就不会消失。

本文翻译自 https://stackoverflow.com/questions/31192393/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 java generics interface frege type-variables


相关文章:

java - 接口重写另一个接口的方法

c# - 传递接口而不是对象实例

java - 使用com.github.clans.fab.FloatingActionButton时,命名空间“ fab”未绑定错误

c# - 如何使用out参数[duplicate]声明泛型委托

java - 为通用类编写单元测试…最佳方法?

java - Java泛型:绑定类扩展类OR 2接口

java - Java-启动时响应捕获KeyEvent?

java - Android应用程序自定义字体在手机上被完全忽略

java - 为什么在lambda中使用的局部变量必须是final或有效的final? [重复]

java - 使用基于反射的静态调用代替接口