繁体   English   中英

将Frege列表转换为Java数组

[英]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中,我们无法使用intlong等基本类型实例化类型变量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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM