java - 如何在 Frege 中声明带有类型变量的 native 接口(interface)?

标签 java generics interface frege type-variables

我想在 Frege 中本地声明一个具有泛型类型的 java 接口(interface)。例如,让我们从 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,它应该可以工作。

此外,在 Eclipse 中,请确保您不会被不会消失的错误标记所愚弄。例如,当您保存时,错误会变得粘滞,并且如果不重新编译就不会消失。

关于java - 如何在 Frege 中声明带有类型变量的 native 接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31192393/

相关文章:

java - 无法导入GenericBooleanPrefItemBasedRecommender

java - 如何在点后分割字符串并将其打印到下一行

java - 在 Windows cmd 中转义 jvm 参数

C++:派生+基类实现单个接口(interface)?

java - 如何编写 Maven 构建脚本来执行 Java

java编译器奇怪: field declared in same class,但 "not visible"

C# foreach 在一个接口(interface)的集合上

c# - 将setter添加到C#接口(interface)中继承的只读属性

java - 接口(interface)中的静态初始化

java - Kotlin:如何在运行时的 OneClass<T> 中获取实际的泛型类型 T