[英]Converting a Frege List to a Java Array
假设我在Frege中定义了一个小的,有点冗余的桥接函数
listToArray :: (PrimitiveArrayElement α) => [α] -> JArray α
listToArray = arrayFromList
以及一些将已经获得的TList<Long>
传递给它的Java代码
TList<Long> tl_results = ...
Long[] results = FregeStuffies.listToArray(IPrimitiveArrayElement_Long.it, Thunk.lazy(results));
Eclipse抱怨传递给FregeStuffies.listToArray
的参数不适用于它的内容
listToArray(PreludeArrays.CPrimitiveArrayElement<α[],α>, Lazy<PreludeBase.TList<α>>)
我是否传递了错误的{context} / { PrimitiveArrayElement
实例}?
原始数组类型需要在Java中进行一些特殊处理,这也禁止在Frege中完全使用泛型。
这样做的原因是我们在Java中不能将原始类型作为泛型。 当我们有
static<A> ... foo(A[] arg) { ... }
在Java中,我们无法使用int
或long
等基本类型实例化类型变量A
这意味着,就目前而言, listToArray
函数不适用于基于Java原始类型的Frege类型(据说Java 10中将支持这些内容)。
对于基本类型的数组,您需要知道它是哪种类型,然后在您的情况下调用适当的方法:
PreludeArrays.IPrimitiveArrayElement_Long.arrayFromList
另请注意,Frege目前尚未明确支持盒装基元类型。 这是因为这些类型通过Javas自动装箱和自动取消装箱自动支持。
如果你真的需要一个盒装long
的数组,你可以将java.lang.Long
定义为本机类型,使其成为ArrayElement
的实例并提供明确的装箱和拆箱功能。 因为java.lang.Long
是一个引用类型,所以将它用作数组元素没有任何限制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.